Python 特定格式输出 itertools.product

Python specific format output with itertools.product

我正在尝试使用下面给出的代码。

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, 0), ('x', 0, 1), ('x', 1, 0), ('x', 1 , 1), ('x', 2, 0), ('x', 2,1)]

但我得到的输出是

[(['x'],), ([0, 1],), ([0, 1, 2],)]

您可以使用 itertools.product:

>>> from itertools import product
>>> list(product(range(3), range(4)))
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
>>>
>>> def print_array(l):
...     for p in product(*map(range, l)):
...         print p
... 
>>> print_array([3, 4])
(0, 0)
(0, 1)
(0, 2)
[...]

这里稍微解释一下为什么您的程序没有按预期运行。 product 不是可迭代列表,而是采用可变数量的参数。您可以使用星号 *:

将列表解压缩为函数的参数
e = [['x'], [0, 1], [0, 1, 2]]
product(e)   # won't work
product(e[0], e[1], e[2])   # ok when e's length is exactly 3
product(*e)   # works for any e -> equivalent to product(e[0], e[1], ....)