Python: El producto cartesiano

Objetivo: mostrar una técnica eficiente para determinar el producto cartesiano de dos conjuntos empleando listas por comprensión.

Imagina que entre la equipación deportiva que incluye tu armario figuran camisetas de cuatro colores: blanco, verde, azul y amarillo. Dispones, además, de tres tipos de pantalones: largo, medio y corto.

¿De cuántas maneras distintas podrías vestirte para salir a correr?

La respuesta la facilita el concepto de producto cartesiano, que con certeza estudiaste en los primeros cursos de matemáticas. Un breve repaso…

Sean dos conjuntos independientes A y B, al conjunto de todas las agrupaciones posibles que se forman tomando un elemento de A y otro de B, se le denomina producto cartesiano de A y B y se denota como A x B.

Además, el número de elementos de que consta A x B es el número de elementos de A multiplicado por el número de elementos de B.

Para referirnos al número de elementos de un conjunto recurrimos al término cardinal, de modo que:

card(A x B) = card(A) x card(B)

Este concepto es extensible a más de dos conjuntos: el cardinal del producto cartesiano de varios conjuntos es el producto de los cardinales individuales.

En nuestro ejemplo, si tenemos cuatro tipos de camisetas y tres de pantalones, dispondremos de 12 maneras diferentes de vestirnos.

Nuestra labor pythonesca va a ser listar todos estos pares y para ello recurriremos a la técnica de las listas por comprensión que presentamos en los últimos artículos y que ahora refinaremos de un modo particular.

Comencemos definiendo las estructuras:

>>> camisetas = {'blanca', 'verde', 'azul', 'amarilla'}
>>> pantalones = {'largo', 'medio', 'corto'} 

He elegido conjuntos por mayor similitud conceptual, pero, naturalmente, puedes emplear cualquier tipo de secuencia como las listas o las tuplas.

Creemos nuestra lista por comprensión:

1) Recorremos el iterable:

for c in camisetas for p in pantalones

Esta es el punto crítico al que quería llegar. En las listas por comprensión podemos anidar tantos for como deseemos.

2) A la izquierda de lo anterior escribimos lo que deseamos obtener:

(c, p) for c in camisetas for p in pantalones

He optado por agrupar cada par en una tupla.

3) A la derecha del todo escribimos la condición de filtrado.

En este ejemplo no hay ninguna, por lo que no es aplicable.

4) Rodeamos toda la expresión entre llaves y ya tenemos creada la lista por comprensión.

>>> [(c, p) for c in camisetas for p in pantalones]
[('verde', 'corto'), ('verde', 'medio'), ('verde', 'largo'), 
('amarilla', 'corto'), ('amarilla', 'medio'), ('amarilla', 'largo'), 
('azul', 'corto'), ('azul', 'medio'), ('azul', 'largo'), 
('blanca', 'corto'), ('blanca', 'medio'), ('blanca', 'largo')]

Programar con eficacia y eficiencia supone armarse con una buena colección de usos típicos para resolver problemas frecuentes, como por ejemplo hallar el producto cartesiano. Las listas por comprensión, sin duda, figurarán en muchos de esos usos.

Javier Montero Gabarró


Python: El producto cartesiano


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies