Producto cruzado por pares en Python

¿Cómo puedo obtener la lista de pares de productos cruzados de una lista de listas arbitrariamente largas en Python?

Ejemplo

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

crossproduct(a,b) debe producir [[1, 4], [1, 5], [1, 6], ...] .

Estás buscando itertools.product si estás en (al menos) Python 2.6.

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

Desde que pediste una lista:

 [(x, y) for x in a for y in b] 

Pero puede evitar la sobrecarga de una lista si simplemente realiza un ciclo a través de estos mediante el uso de generadores:

 ((x, y) for x in a for y in b) 

Se comporta de forma idéntica en un bucle for pero no da como resultado la creación de una list .

Usando generadores no hay necesidad de itertools, simplemente:

 gen = ((x, y) for x in a for y in b) for u, v in gen: print u, v