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)]