All possible variants of zip in Python

If you're interested only in the result, then itertools.product is what you need (+1 to @DSM for this). However, if you're interested in the algorithm that generates something like this, it's called recursive descent. The algorithm, in this case, would run as follows (I'm just going to print the results here for clarity):

def product(L, tmp=None):
    if tmp is None:
        tmp = []
    if L==[]:
        print tmp
    else:
        for i in L[0]:
            product(L[1:], tmp+[i])

Thus,

>>> product([[1,2], [4,5]])
[1, 4]
[1, 5]
[2, 4]
[2, 5]

Hope this helps


Don't overlook the obvious:

out = []
for a in [1, 2]:
    for b in [4, 5]:
        out.append((a, b))

or list comprehensions:

a = [1, 2]
b = [4, 5]
out = [(x, y) for x in a for y in b]

Both produce out == [(1, 4), (1, 5), (2, 4), (2, 5)]


You can do this nicely with list comprehension, or better yet with a generator expression if you just need to iterate through the combinations.

Here's it is using list comprehension:

a = [1, 2]
b = [4, 5]

[(i, j) for i in a for j in b]

And here with a generator expression:

for pair in ((i, j) for i in a for j in b):
    print(pair)

You want itertools.product:

>>> import itertools
>>> a = [1,2]
>>> b = [4,5]
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (2, 4), (2, 5)]

Tags:

Python

List