2016-02-25 21 views
5

Mam listę list, nad którymi muszę iteracyjne 3 razy (3 zagnieżdżone pętle)Python itertools: Najlepszym sposobem, aby rozpakować produkt produktu wykazu list

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

można to osiągnąć przy użyciu produkt Produkt następująco

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

wyjście wygląda następująco

(([-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]) 

jego krotką krotki. Moje pytania to:

  1. Czy to jest dobre podejście?
  2. Jeśli tak, to jaka jest Bestway rozpakować wyjście produktu val na 3 oddzielne zmienne powiedzieć xRange, yRange i zRange, gdzie każdy posiada wartości katalogowej powiedzieć [-0.18, 0.18] lub [0.14, 0.52] itp
+3

Sprawdź argument 'repeat' dla' itertools.product'. Chcesz 'product (rangeList, repeat = 3)'. Chociaż działa również 'product (rangeList, rangeList, rangeList)'. –

+2

'val' nie jest iteratorem, ale wynikiem' produktu' jest. A propos, jak chcesz wyglądać 'xRange',' yRange' i 'zRange'? Jakie wartości powinny zawierać? – ForceBru

+0

możliwe jest, że chcesz 'product (* rangeList)', aby uzyskać pożądany wynik, ale nie mogę wiedzieć, chyba że pokażesz pożądane wyjście/wartości dla 'xRange' /' yRange'/'zRange' –

Odpowiedz

9

jest to prawdopodobnie najbardziej elegancki sposób, aby robić to, co chcesz:

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

Ale tylko pokazać, jak można zrobić „głębokie” krotki rozpakowaniu były próby:

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

Pięknie pracował z opcją powtarzania. Dziękuję Ci – WanderingMind

Powiązane problemy