2010-06-13 13 views
28

Tengo una lista de matrices y me gustaría obtener el producto cartesiano de los elementos en las matrices.¿Cómo aplicar itertools.product a elementos de una lista de listas?

voy a utilizar un ejemplo para hacer esto más concreto ...

itertools.product parece hacer el truco, pero estoy atascado en un pequeño detalle.

arrays = [(-1,+1), (-2,+2), (-3,+3)]; 

Si hago

cp = list(itertools.product(arrays)); 

consigo

cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)] 

Pero lo que quiero conseguir es

cp1 = [(-1,-2,-3), (-1,-2,+3), (-1,+2,-3), (-1,+2,+3), ..., (+1,+2,-3), (+1,+2,+3)]. 

He intentado algunas cosas diferentes:

cp = list(itertools.product(itertools.islice(arrays, len(arrays)))); 
cp = list(itertools.product(iter(arrays, len(arrays)))); 

Todos me dio CP0 en lugar de CP1.

¿Alguna idea?

Gracias de antemano.

+0

usted ya tiene las respuestas a continuación, pero esto tiene algunos casos un buen uso de la función itertools producto: https://www.hackerrank.com/challenges/itertools-product – Afflatus

Respuesta

36
>>> list(itertools.product(*arrays)) 
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)] 

Esto alimentará todos los pares como argumentos separados a product, que a su vez le dará el producto cartesiano de ellos.

El motivo por el que su versión no funciona es que le está dando a product un solo argumento. Pedir un producto cartesiano de una lista es un caso trivial, y devuelve una lista que contiene solo un elemento (la lista dada como argumento).

35
>>> arrays = [(-1,+1), (-2,+2), (-3,+3)] 
>>> list(itertools.product(*arrays)) 
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)] 
+7

¿El tener un prefijo de Asterix tiene una matriz significado especial en python o es solo algo específico de itertools.product? – Ominus

+3

Ver http://stackoverflow.com/q/5239856/395857 y [Desempaquetar listas de argumentos] (https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists). –

Cuestiones relacionadas