如何用Python循环获取三个列表的所有可能组合
解决方案
你可以用itertools.combinations生成所有非空的列表组合,再逐个拼接组合内的列表,完全匹配你需要的结果。具体代码如下:
import itertools list_a = [1, 2] list_b = [3, 4] list_c = [5, 6] # 将三个列表统一存入一个列表中 all_lists = [list_a, list_b, list_c] # 遍历所有非空组合(长度从1到3) for length in range(1, len(all_lists)+1): # 生成当前长度的所有不重复组合 for combo in itertools.combinations(all_lists, length): # 拼接组合内的列表 new_list = [] for lst in combo: new_list.extend(lst) # 打印结果,也可存入列表备用 print(new_list)
运行后输出结果:
[1, 2] [3, 4] [5, 6] [1, 2, 3, 4] [1, 2, 5, 6] [3, 4, 5, 6] [1, 2, 3, 4, 5, 6]
如果需要把所有结果收集到一个列表中,可修改为:
import itertools list_a = [1, 2] list_b = [3, 4] list_c = [5, 6] all_lists = [list_a, list_b, list_c] result = [] for length in range(1, len(all_lists)+1): for combo in itertools.combinations(all_lists, length): combined = [] for lst in combo: combined.extend(lst) result.append(combined) print(result)
补充说明
itertools.combinations生成的组合是不重复且保持原列表顺序的,正好对应你要求的“顺序无关”(不会出现list_b+list_a这类反向拼接的情况)。- 用
extend拼接列表比直接用+更高效,尤其是当列表元素较多时;如果追求代码简洁,也可以用sum(combo, [])替代循环拼接,但这种方式在列表规模较大时性能会下降。
内容的提问来源于stack exchange,提问作者Bjoern
相关产品推荐
相关产品推荐

