2016-02-25 28 views
5

Tôi có một danh sách liệt kê trên mà tôi cần phải lặp 3 lần (3 vòng lồng nhau)Python itertools: Cách tốt nhất để giải nén sản phẩm của sản phẩm của danh sách liệt kê

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

tôi có thể đạt được điều này sản phẩm sử dụng của sản phẩm như sau

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

Kết quả trông như sau

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

nó một tuple của tuple. Câu hỏi của tôi là

  1. Đây có phải là cách tiếp cận tốt không?
  2. Nếu vậy, Bestway để giải nén đầu ra của sản phẩm val thành 3 biến riêng biệt nói xRange, yRangezRange, trong đó mỗi một giá trị nắm giữ danh sách là những gì nói [-0.18, 0.18] hoặc [0.14, 0.52], vv
+3

Xem đối số 'lặp lại' để' itertools.product'. Bạn muốn 'sản phẩm (rangeList, repeat = 3)'. Mặc dù 'product (rangeList, rangeList, rangeList)' cũng hoạt động. –

+2

'val' không phải là một trình lặp, nhưng kết quả của' sản phẩm' là. Bằng cách này, những gì bạn muốn 'xRange',' yRange' và 'zRange' của bạn trông giống như thế nào? Họ nên chứa những giá trị nào? – ForceBru

+0

có thể bạn muốn 'product (* rangeList)' để có được kết quả mong muốn nhưng tôi không thể biết trừ khi bạn hiển thị kết quả/giá trị mong muốn cho 'xRange' /' yRange'/'zRange' –

Trả lời

9

Đây có lẽ là cách thanh lịch nhất để thực hiện những gì bạn muốn:

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

Nhưng chỉ để minh họa cách bạn có thể thực hiện việc giải nén "sâu" bạn đang thử:

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

Được làm việc đẹp mắt với tùy chọn lặp lại. Cảm ơn bạn – WanderingMind

Các vấn đề liên quan