我正在尝试使用下面给出的代码。
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],)]
答案 0 :(得分: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], ....)