说我有两个清单,
one = ['a1', 'b1', 'c1']
two = ['a2', 'b2', 'c2']
Run Code Online (Sandbox Code Playgroud)
我想生成这些项目的所有可能组合的集合,而不更改它们在各自列表中的位置.所以对于上面的例子,它是:
['a1', 'b1', 'c1']
['a1', 'b1', 'c2']
['a1', 'b2', 'c2']
['a2', 'b1', 'c1']
['a2', 'b2', 'c1']
['a2', 'b2', 'c2']
Run Code Online (Sandbox Code Playgroud)
我正在寻找itertools希望找到符合此描述的东西,但我还没找到.
您正在寻找的功能是,product但您需要先设置它.问题是你的值是"横向" - 你想把第一个位置的所有可能值放在一起,然后放在第二个位置,等等.你可以用*zip()机动"转置"你的数据.
from itertools import product
list(product(*zip(one, two)))
Run Code Online (Sandbox Code Playgroud)
结果是
[('a1', 'b1', 'c1'),
('a1', 'b1', 'c2'),
('a1', 'b2', 'c1'),
('a1', 'b2', 'c2'),
('a2', 'b1', 'c1'),
('a2', 'b1', 'c2'),
('a2', 'b2', 'c1'),
('a2', 'b2', 'c2')]
Run Code Online (Sandbox Code Playgroud)
如果你真的想要列表而不是元组,请使用
[list(v) for v in product(*zip(one, two))]
Run Code Online (Sandbox Code Playgroud)
给你的
[['a1', 'b1', 'c1'],
['a1', 'b1', 'c2'],
['a1', 'b2', 'c1'],
['a1', 'b2', 'c2'],
['a2', 'b1', 'c1'],
['a2', 'b1', 'c2'],
['a2', 'b2', 'c1'],
['a2', 'b2', 'c2']]
Run Code Online (Sandbox Code Playgroud)
请注意,这些并不是您列出的所需输出,因为您遗漏了几种可能性.
| 归档时间: |
|
| 查看次数: |
36 次 |
| 最近记录: |