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