我想要一堆列表的笛卡尔积。
from itertools import product
v1=['a','b','c']
v2=['1','2']
v3=['x','y','z']
list(product(v1,v2,v3))
这将返回期望的结果:
[('a', '1', 'x'),
('a', '1', 'y'),
('a', '1', 'z'),
('a', '2', 'x'),
('a', '2', 'y'),
('a', '2', 'z'),
('b', '1', 'x'),
('b', '1', 'y'),
('b', '1', 'z'),
('b', '2', 'x'),
('b', '2', 'y'),
('b', '2', 'z'),
('c', '1', 'x'),
('c', '1', 'y'),
('c', '1', 'z'),
('c', '2', 'x'),
('c', '2', 'y'),
('c', '2', 'z')]
但是,我不知道预先列出的数量。假设我将它们存储为列表vs
的列表,我尝试这样做:
vs=[v1,v2,v3]
list(product(vs))
当然,这不能满足我的要求,因为它将vs
视为单个参数,而不是多个参数。
[(['a', 'b', 'c'],), (['1', '2'],), (['x', 'y', 'z'],)]
是否有一种方法可以将列表列表传递到product
并使其在子列表上运行?
尝试使用带星号的表达式list(product(*vs))