2016-02-04 2 views
0

Я пытаюсь использовать код, приведенный ниже.Выходной формат форматирования Python с 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_) 

Я ожидаю результата, как приведено ниже

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

но я получаю выход как

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

+3

Что вы пытаетесь достичь? – L3viathan

+0

Вы должны изменить 'itertools.product (e)' на 'itertools.product (* e)'. – eskaev

ответ

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], ....) 
+0

@ Daniel Roseman, теперь я думаю, что вопрос ясен. –

Смежные вопросы