说我有两个列表,
one = ['a1', 'b1', 'c1']
two = ['a2', 'b2', 'c2']
我想生成这些项目所有可能组合的集合,而无需更改它们在各自列表中的位置。因此,对于上面的示例,它是:
['a1', 'b1', 'c1']
['a1', 'b1', 'c2']
['a1', 'b2', 'c2']
['a2', 'b1', 'c1']
['a2', 'b2', 'c1']
['a2', 'b2', 'c2']
我正在寻找itertools
,希望找到与该描述相匹配的内容,但是我还没有找到。
答案 0 :(得分:5)
您要查找的功能是product
,但您需要先对其进行设置。问题在于您的值“横向”放置-您想将第一个位置的所有可能值放在一起,然后将第二个位置的所有可能值放在一起,依此类推。您可以通过*zip()
操作“转置”数据。
from itertools import product
list(product(*zip(one, two)))
结果是
[('a1', 'b1', 'c1'),
('a1', 'b1', 'c2'),
('a1', 'b2', 'c1'),
('a1', 'b2', 'c2'),
('a2', 'b1', 'c1'),
('a2', 'b1', 'c2'),
('a2', 'b2', 'c1'),
('a2', 'b2', 'c2')]
如果您真的想要列表而不是元组,请使用
[list(v) for v in product(*zip(one, two))]
给你
[['a1', 'b1', 'c1'],
['a1', 'b1', 'c2'],
['a1', 'b2', 'c1'],
['a1', 'b2', 'c2'],
['a2', 'b1', 'c1'],
['a2', 'b1', 'c2'],
['a2', 'b2', 'c1'],
['a2', 'b2', 'c2']]
请注意,由于您遗漏了几种可能性,因此这些与您列出的期望输出并不完全相同。