2016-02-25 4 views
5

У меня есть список списков, над которыми мне нужно повторять 3 раза (3 вложенные циклы)Python itertools: Лучший способ распаковать продукт продукта списка списков

rangeList = [[-0.18,0.18],[0.14,0.52],[0.48,0.85]] 

я могу добиться этого с помощью продукта продукт следующего

from itertools import product 
for val in product(product(rangeList,rangeList),rangeList): 
    print val 

Результат выглядит следующим образом

(([-0.18, 0.18], [-0.18, 0.18]), [-0.18, 0.18]) 
(([-0.18, 0.18], [-0.18, 0.18]), [0.14, 0.52]) 
(([-0.18, 0.18], [-0.18, 0.18]), [0.48, 0.85]) 
(([-0.18, 0.18], [0.14, 0.52]), [-0.18, 0.18]) 

Сво кортеж кортеж. Мои вопросы:

  1. Это хороший подход?
  2. Если да, то это Bestway распаковать выход продукта val в 3 отдельные переменные говорят xRange, yRange и zRange, где каждая содержит значение списка, скажем, [-0.18, 0.18] или [0.14, 0.52] т.д.
+3

Посмотрите аргумент 'repeat' в' itertools.product'. Вы хотите 'product (rangeList, repeat = 3)'. Хотя 'product (rangeList, rangeList, rangeList)' также работает. –

+2

'val' - не итератор, а результат' продукта'. Кстати, вы хотите, чтобы ваши 'xRange',' yRange' и 'zRange' выглядели? Какие значения они должны содержать? – ForceBru

+0

Возможно, вы хотите 'product (* rangeList)' получить желаемый результат, но я не могу знать, если вы не покажете желаемый результат/значения для 'xRange' /' yRange'/'zRange' –

ответ

9

Это, вероятно, самый элегантный способ сделать то, что вы хотите:

for xrange, yrange, zrange in product(rangeList, repeat=3): 
    print xrange, yrange, zrange 

Но только чтобы показать, как вы можете сделать «глубокий» кортеж распаковке вы пытаетесь:

for (xrange, yrange), zrange in product(product(rangeList,rangeList),rangeList): 
    print xrange, yrange, zrange 
+1

Работала красиво с возможностью повтора. спасибо – WanderingMind

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

  • Нет связанных вопросов^_^