python itertools.product错误地给出结果为[([';x';],,([0,1],),([0,1,2],)]
我有一张单子python itertools.product错误地给出结果为[([';x';],,([0,1],),([0,1,2],)],python,itertools,Python,Itertools,我有一张单子 e = [['x'], [0, 1], [0, 1, 2]] 从这个列表中,我想产生以下输出 [('x', 0, 0), ('x', 0, 1), ('x', 1, 0), ('x', 1, 1), ('x', 2, 0), ('x', 2,1)] 下面是我使用的代码 import itertools f=[[0], [2], [3]] e=[['x']if f[j][0]==0 else range(f[j][0]) for j in range(len(f))] prin
e = [['x'], [0, 1], [0, 1, 2]]
从这个列表中,我想产生以下输出
[('x', 0, 0), ('x', 0, 1), ('x', 1, 0), ('x', 1, 1), ('x', 2, 0), ('x', 2,1)]
下面是我使用的代码
import itertools
f=[[0], [2], [3]]
e=[['x']if f[j][0]==0 else range(f[j][0]) for j in range(len(f))]
print(e)
List1_=[]
for i in itertools.product(e):
List1_.append(i)
print(List1_)
但我得到的输出是
[(['x'],), ([0, 1],), ([0, 1, 2],)]
谢谢,
Sans这就是它的用途。但是您需要更改第二项和第三项才能创建预期的产品
还请注意,您需要使用*
操作数来解压缩嵌套列表。因为product
接受多个iterable并计算它们的乘积。因此,您需要传递子列表,而不是整个列表
>>> e = [['x'], [0, 1, 2], [0, 1]]
>>> list(product(*e))
[('x', 0, 0), ('x', 0, 1), ('x', 1, 0), ('x', 1, 1), ('x', 2, 0), ('x', 2, 1)]
您没有在代码中解包
e
:
>>> list(product(e))
[(['x'],), ([0, 1],), ([0, 1, 2],)]
>>>
>>> list(product(*e))
[('x', 0, 0), ('x', 0, 1), ('x', 0, 2), ('x', 1, 0), ('x', 1, 1), ('x', 1, 2)]
>>>
引述自:
itertools.product(*iterables,repeat=1)
输入的笛卡尔积
不可抗力
等效于生成器表达式中的嵌套for循环。例如
乘积(A,B)返回的值与((x,y)表示A中的x表示B中的y)相同
如果订单对您来说比重要,只需将您的e
列表重新排序为:
>>> e = [['x'], [0, 1, 2], [0, 1]]
然后您可以获得预期的输出:
>>> list(product(*e))
[('x', 0, 0), ('x', 0, 1), ('x', 1, 0), ('x', 1, 1), ('x', 2, 0), ('x', 2, 1)]