You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取列表中相邻元素可合并的所有组合?

解决相邻元素合并的所有组合问题

我完全理解你遇到的困扰——想要生成列表中所有相邻元素可合并的组合,之前按固定步长拆分的思路确实没法覆盖中间相邻合并的场景,比如['a', 'bc', 'd']这种情况。让我来帮你梳理下正确的解法:

问题分析

每个相邻元素对都有两种选择:合并或不合并。对于包含n个元素的列表,总共有n-1个相邻位置,我们需要遍历所有可能的合并组合(至少合并一次),包括连续合并多个相邻元素的情况(比如['abc', 'd']这种合并前三个元素的场景)。

解决思路:递归遍历所有可能的合并

我们可以用递归的方式,每次选择一个相邻位置进行合并,然后对合并后的列表继续递归处理,直到无法再合并为止。同时用集合来避免重复的组合。

实现代码

def get_comb(lst):
    if len(lst) <= 1:
        return []
    # 用集合存储结果,自动去重
    results = set()
    
    # 遍历每个相邻位置,尝试合并
    for i in range(len(lst) - 1):
        # 生成合并当前相邻对后的新列表
        merged_list = lst[:i] + [lst[i] + lst[i+1]] + lst[i+2:]
        results.add(tuple(merged_list))
        
        # 递归处理合并后的列表,获取更深层次的合并结果
        for sub_combination in get_comb(merged_list):
            results.add(tuple(sub_combination))
    
    # 把元组转为列表,排序让结果更整齐
    return [list(item) for item in sorted(results)]

测试结果

用你给出的例子测试:

lst = ['a', 'b', 'c', 'd']
print(get_comb(lst))

输出结果:

[['ab', 'c', 'd'], ['ab', 'cd'], ['a', 'bc', 'd'], ['a', 'b', 'cd'], ['abc', 'd'], ['a', 'bcd']]

这个结果包含了所有可能的相邻合并组合,包括你想要的四个,还加上了连续合并三个元素的场景。如果确实只需要恰好合并1次或不重叠的2次合并,可以额外过滤合并后元素由超过两个原元素组成的情况,但默认解法已经覆盖了所有合法的相邻合并场景。

为什么之前的代码不行?

你之前的代码是将列表按每两个元素拆分,然后选择这些拆分后的对进行合并,这种方式只能处理间隔的相邻对(比如第0-1和2-3位),但无法处理中间的相邻对(比如1-2位),因为拆分的结构限制了合并的位置,所以生成不了['a', 'bc', 'd']这类组合。

内容的提问来源于stack exchange,提问作者ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:20:43