2016-02-25 22 views
5

Ben 3 kez (3 iç içe döngüler) yinelemek gerekiyor ki üzerinde listelerin bir listesi varPython itertools: listelerinin listesinin ürünün ürünü paketten en iyi yolu

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

ben bu kullanarak ürünü elde edebilirsiniz

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

şöyle

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

Onun başlığın tuple aşağıdaki gibi ürün çıkışı görünüyor. Sorularım:

  1. Bu iyi bir yaklaşım mıdır? 3 ayrı değişkenler her bir listesi değerini tutan xRange, yRange ve zRange, demek içine ürünün val ait çıkışını açmak için Bestway ne
  2. Eğer öyleyse, vb [-0.18, 0.18] veya [0.14, 0.52]
+3

'itertools.product' 'repeat' argümanına bakın. Ürünün (rangeList, tekrar = 3) olmasını istersiniz. Yine de ürün (rangeList, rangeList, rangeList) 'da çalışır. –

+2

'val' bir yineleyici değil,' product' sonucudur. Bu arada, ne 'xRange',' yRange' ve 'zRange' istediğiniz gibi görünüyorsun? Hangi değerleri içermelidir? – ForceBru

+0

'İstediğiniz sonuca ulaşmak için ürün (* rangeList) 'seçeneğini kullanabilirsiniz ancak istediğiniz çıktıyı/değerleri göstermek için' xRange' /' yRange'/'zRange' –

cevap

9

demek

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

Ama sen çalışıyorlardı açma "derin" tuple nasıl yapabileceğimizi göstermek için: Bu muhtemelen ne istediğinizi yapmak için en şık yoludur

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

Yineleme seçeneği ile güzelce çalıştım. teşekkür ederim – WanderingMind

İlgili konular