libreria - product() python
¿Cómo aplicar itertools.product a los elementos de una lista de listas? (2)
>>> 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)]
Tengo una lista de matrices y me gustaría obtener el producto cartesiano de los elementos en las matrices.
Usaré un ejemplo para hacer esto más concreto ...
itertools.product parece ser el truco, pero estoy atrapado en un pequeño detalle.
arrays = [(-1,+1), (-2,+2), (-3,+3)];
Si lo hago
cp = list(itertools.product(arrays));
yo obtengo
cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
Pero lo que quiero obtener 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 dieron cp0 en lugar de cp1 .
¿Algunas ideas?
Gracias por adelantado.
>>> 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á a todos los pares como argumentos separados para el product
, que luego le dará el producto cartesiano de ellos.
La razón por la cual su versión no funciona es que le está dando al product
solo un 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).