Python: la forma más corta de calcular el poder cartesiano de la lista

Supongamos que tenemos una lista L El producto cartesiano L x L podría computarse así:

 product = [(a,b) for a in L for b in L] 

¿Cómo se puede calcular la potencia cartesiana L x L x L x ... x L (n veces, para un n dado) de manera corta y eficiente?

Usando itertools.product() :

 product = itertools.product(L, repeat=n) 

donde el product es ahora un iterable; list(product) llamadas list(product) si desea materializar eso en una lista completa:

 >>> from itertools import product >>> list(product(range(3), repeat=2)) [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]