Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate over all combinations of values in multiple lists in Python

Given multiple list of possibly varying length, I want to iterate over all combinations of values, one item from each list. For example:

first = [1, 5, 8]
second = [0.5, 4]

Then I want the output of to be:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]

I want to iterate over the combined list. How do I get this done?

like image 941
DurgaDatta Avatar asked May 05 '13 11:05

DurgaDatta


2 Answers

itertools.product should do the trick.

>>> import itertools
>>> list(itertools.product([1, 5, 8], [0.5, 4]))
[(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]

Note that itertools.product returns an iterator, so you don't need to convert it into a list if you are only going to iterate over it once.

eg.

for x in itertools.product([1, 5, 8], [0.5, 4]):
    # do stuff
like image 87
Volatility Avatar answered Oct 23 '22 06:10

Volatility


This can be achieved without any imports using a list comprehension. Using your example:

first = [1, 5, 8]
second = [0.5, 4]

combined = [(f,s) for f in first for s in second]

print(combined)
# [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
like image 30
spinup Avatar answered Oct 23 '22 04:10

spinup