如何将列表列表粘贴到需要* iterables的函数中

问题描述 投票:0回答:1

我想要一堆列表的笛卡尔积。

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并使其在子列表上运行?

python-3.x itertools
1个回答
1
投票

尝试使用带星号的表达式list(product(*vs))

© www.soinside.com 2019 - 2024. All rights reserved.