如何在双层列表上使用itertools生成所有跨子列表元素组合?
正确实现需求的方法
你用itertools.combinations的思路错了——这个函数是用来从外层列表里选取指定数量的子列表,所以才会返回子列表的组合,完全不是你要的“从每个子列表选一个元素”的效果。
要实现从每个子列表中选一个元素生成所有可能组合,应该用itertools.product,它专门用来计算多个可迭代对象的笛卡尔积,正好匹配你的需求:
import itertools A = [[1, 5],[2, 6], [3, 7], [4, 8]] for combo in itertools.product(*A): print(combo)
运行这段代码会输出所有16种组合,比如(1,2,3,4)、(1,2,3,8)、(1,2,7,4)等等。如果需要把结果转换成列表格式,可以这样写:
import itertools A = [[1, 5],[2, 6], [3, 7], [4, 8]] result = [list(combo) for combo in itertools.product(*A)] print(result)
这样得到的就是你预期的列表形式的组合集合。
内容的提问来源于stack exchange,提问作者Jose Herrera
相关产品推荐
相关产品推荐

