在函数中输入未知长度的列表作为输入

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_vecslist_vecs.append(vec4)


以上是在函数中输入未知长度的列表作为输入的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>