python – 从多个列表生成一个项目的每个组合

参见英文答案 > Getting all possible value combinations                                    1个
我想采用不确定数量的列表,长度不确定,并生成每个列表中一个元素的每个可能组合.为了效率,我的目的是简单地迭代每个组合,而不是存储结果.

例如,以下列表列表:

[['A','B','C'],['w','x','y','z'],[1,2]]

会成为:

['A','w',1],['A','w',2],['A','x',1],['A','x',2],...,['C','z',1],['C','z',2]

不是拉链,不是很好的itertools.permutation()…如果你提前知道列表的数量,这很容易做到,但在这种情况下我不会.我相信我可以把这个递归解决方案拼凑在一起,但也许这已经解决了.任何见解?

解决方法:

itertools.product是适合您的工具

>>> some_list = [['A','B','C'],['w','x','y','z'],[1,2]]
>>> list(itertools.product(*some_list))
[('A', 'w', 1), ('A', 'w', 2), ('A', 'x', 1), ('A', 'x', 2), ('A', 'y', 1), ('A', 'y', 2), ('A', 'z', 1), ('A', 'z', 2), ('B', 'w', 1), ('B', 'w', 2), ('B', 'x', 1), ('B', 'x', 2), ('B', 'y', 1), ('B', 'y', 2), ('B', 'z', 1), ('B', 'z', 2), ('C', 'w', 1), ('C', 'w', 2), ('C', 'x', 1), ('C', 'x', 2), ('C', 'y', 1), ('C', 'y', 2), ('C', 'z', 1), ('C', 'z', 2)]

几个关键点

> itertools.product期望迭代作为参数.因此,您需要使用splat运算符将列表作为参数传递
> itertools.product返回一个生成器.您需要将其转换为列表,以转储整个内容.或者,您可以迭代它或传递给期望迭代的函数

for e in itertools.product(*some_list):
    print e
上一篇:c# – 如何根据提供的限制进行组合?


下一篇:c# – 如何按最少到大多数非零元素的顺序迭代排列?