Python如何遍历嵌套列表各子列表生成2元组组合并汇总为单列表
问题根因
- 存在冗余循环:你写的内层
for j in range(len(my_list[i]))完全没有作用,itertools.combinations可以直接对整个子列表生成指定长度的所有组合,不需要额外遍历子列表元素。 - 结果没有累加存储:每次循环都直接给
twotuples重新赋值,之前子列表生成的组合全部被覆盖丢弃,最终只能拿到最后一次循环对应的最后一个子列表的组合结果。
修复后的代码
首先记得提前导入itertools模块,两种写法可选:
常规循环写法(可读性更高)
import itertools def totwotuples(my_list): all_tuples = [] for sub_list in my_list: # 生成当前子列表的2元素组合,追加到总列表 all_tuples.extend(itertools.combinations(sub_list, 2)) return all_tuples
列表推导式写法(更简洁)
import itertools def totwotuples(my_list): return [comb for sub in my_list for comb in itertools.combinations(sub, 2)]
效果验证
用你给出的前两个子列表做测试:
输入:[['a','b','c','d'], ['a','c','d']]
输出结果和你预期的完全一致:[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a', 'c'), ('a', 'd'), ('c', 'd')]
内容的提问来源于stack exchange,提问作者Mario R. Brichetto
相关产品推荐
相关产品推荐

