在函数中输入未知长度的列表作为输入
from itertools import product
vec=['A1','A2','A3']
vec2=['B1','B2',]
vec3=['C1','C2','C3']
result = list(product(vec, vec2, vec3,repeat=1))
result
[('A1', 'B1', 'C1'),
('A1', 'B1', 'C2'),
('A1', 'B1', 'C3'),
('A1', 'B2', 'C1'),
('A1', 'B2', 'C2'),
('A1', 'B2', 'C3'),
('A2', 'B1', 'C1'),
('A2', 'B1', 'C2'),
('A2', 'B1', 'C3'),
('A2', 'B2', 'C1'),
('A2', 'B2', 'C2'),
('A2', 'B2', 'C3'),
('A3', 'B1', 'C1'),
('A3', 'B1', 'C2'),
('A3', 'B1', 'C3'),
('A3', 'B2', 'C1'),
('A3', 'B2', 'C2'),
('A3', 'B2', 'C3')]
vec,vec2,vec3 是从循环 vec4 创建的,有时可能会有一些长度。我的问题是如何在list(product(vec, vec2, vec3,repeat=1)). 我product不能自己在循环中输入它,我也想以某种方式选择 vec4。我如何实现这一目标?
vec4=['D1','D2','D3','D4']
回答
如果您在一个列表中使用了所有 vec 列表,则可以在将其传递给产品函数时解压缩此列表:
list_vecs = [vec, vec2, vec3, vec4]
list(product(*list_vecs, repeat=1))
关于 *(星号),请参阅此处的 python 文档:
例如,内置的 range() 函数需要单独的 start 和 stop 参数。如果它们不能单独使用,请使用 *-operator 编写函数调用以将参数从列表或元组中解压缩:
>>> list(range(3, 6)) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args)) # call with arguments unpacked from a list
[3, 4, 5]
如果vec4只是稍后定义,只需将其附加到list_vecs:list_vecs.append(vec4)