Следующий код работает, но отображается подробный.Использование itertools.product вместо двойного вложенного цикла цикла в Python 3
def gen(l):
for x in range(l[0]):
for y in range(l[1]):
for z in range(l[2]):
yield [x, y, z]
l = [1, 2, 3]
print(list(gen(l)))
>>>[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [0, 1, 2]]
Мое намерение состояло в том, чтобы сократить LOC с помощью itertools.product. Вот что я придумал.
from itertools import product
def gen(l):
for x, y, z in product(map(range, l)):
yield [x, y, z]
l = [1, 2, 3]
print(list(gen(l)))
ValueError: not enough values to unpack (expected 3, got 1)
Есть ли другой способ использовать itertools.product, чтобы было достаточно значений для распаковки?
Использование звездочки для разделения элементов отлично работает, но вторая часть вашего ответа возвращает объект TypeError: 'int' не является итерируемым. – CannedSpinach
@CannedSpinach: Этого не должно быть. Я пропустил, что он возвращает итератор кортежей вместо списков (который вы можете [исправить] (http://ideone.com/X53U7S) с другим вызовом 'map'), но даже версия с кортежами [не поднимает a TypeError] (http://ideone.com/eKMOkj). – user2357112