Search code examples
pythonpython-itertoolsflatteniterable-unpacking

Python itertools: Best way to unpack product of product of list of lists


I have a list of lists over which I need to iterate 3 times (3 nested loops)

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

I can achieve this using product of product as follows

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

The output looks as follows

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

Its a tuple of tuple. My questions are

  1. Is this a good approach?
  2. If so, what is the bestway to unpack the output of the product val into 3 separate variables say xRange, yRange and zRange, where each holds a list value of say [-0.18, 0.18] or [0.14, 0.52] etc.

Solution

  • This is probably the most elegant way to do what you want:

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

    But just to demonstrate how you can do the "deep" tuple unpacking you were trying:

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