使用itertools.product

时间:2016-02-04 16:24:58

标签: python format output itertools

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

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

1 个答案:

答案 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], ....)