Pairwise crossproduct in Python
You're looking for itertools.product if you're on (at least) Python 2.6.
>>> import itertools
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> itertools.product(a,b)
<itertools.product object at 0x10049b870>
>>> list(itertools.product(a,b))
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Using generators there is no need for itertools, simply:
gen = ((x, y) for x in a for y in b)
for u, v in gen:
print u, v
Since you asked for a list:
[(x, y) for x in a for y in b]
But you can avoid the overhead of a list if you're just looping through these by using generators instead:
((x, y) for x in a for y in b)
Behaves identically in a for
loop but doesn't result in the creation of a list
.