Python如何获取列表中长度≥2的所有可能组合
实现方案
你需要的是给定列表所有长度≥2、元素不重复、不计顺序的组合,本质是枚举列表所有大小≥2的子集,以下是具体实现方法:
Python 最简实现
直接用标准库itertools自带的combinations方法生成即可,该方法原生支持生成不重复、不计顺序的指定长度组合:
from itertools import combinations def get_target_combinations(input_list): result = [] # 遍历所有符合要求的组合长度:从2到列表总长度 for length in range(2, len(input_list) + 1): # 把生成的元组转成列表,批量加入结果 result.extend(list(combo) for combo in combinations(input_list, length)) return result # 测试用例 test_list = [1,2,3,4] print(get_target_combinations(test_list))
运行输出和你要求的结果完全一致:[[1,2], [1,3], [1,4], [2,3], [2,4], [3,4], [1,2,3], [1,2,4], [1,3,4], [2,3,4], [1,2,3,4]]
无依赖手动实现
如果不想依赖标准库,可以用回溯法自行实现,逻辑可以跨语言复用:
def get_target_combinations(input_list): result = [] def backtrack(start_index, current_path): # 只要当前组合长度≥2就存入结果 if len(current_path) >= 2: result.append(current_path.copy()) # 从start_index往后遍历,避免生成重复的逆序组合 for i in range(start_index, len(input_list)): current_path.append(input_list[i]) backtrack(i + 1, current_path) current_path.pop() backtrack(0, []) return result
注意事项
这种组合的总数量为2^n - n - 1(n为原列表长度),属于指数级复杂度,n超过20时计算量会大幅上涨,注意控制输入列表的规模。
内容的提问来源于stack exchange,提问作者Jose Herrera
相关产品推荐
相关产品推荐

