Objetivo: aprender a crear conjuntos, colecciones de objetos no ordenados, y mostrar cómo determinar la pertenencia y cardinalidad.
Aprovechando que voy a hablar hoy de una estructura de datos no ordenada (en contraposición a las listas o tuplas, por ejemplo), he decidido abandonar la numeración secuencial también en los artículos sobre programación en Python (este debería ser el capítulo 35). Eso me dará más libertad a la hora de elegir los contenidos: comienzo dando capas sobre varios temas que posteriormente retomo. Gradualmente se van interconectando entre sí las distintas piezas del puzzle.
De hecho, ese el modo como aprendemos.
Piensa en los conjuntos como cuando estudiabas matemáticas de pequeño. ¿Recuerdas los famosos círculos, denominados diagramas de Venn, con elementos en su interior? ¿Recuerdas cuando solapábamos esos círculos y hablábamos de cosas como su intersección o unión?
Un conjunto no es más que eso: un conjunto de elementos. No hay un primero ni un segundo. No existe ordenación alguna en ellos: un elemento simplemente está o no está.
Python maneja dos tipos para tratar con conjuntos, en función de si necesitas modificar su contenido o no: set (mutable) y frozenset (inmutable). Hoy nos ocuparemos del primero.
Veamos cómo creamos un conjunto con ciertos elementos concretos:
>>> conjunto1 = {1, 'pimiento', 3, 5}
Esto es, para crear un conjunto, situamos entre llaves todos los elementos separados por comas. Observa como los elementos pueden ser de tipos distintos.
Podemos comprobar que conjunto1
es del tipo set:
>>> type(conjunto1)
<class 'set'>
Para crear un conjunto vacío puede ser tentador hacer algo como:
>>> conjunto2={}
Sin embargo, el resultado no sería el esperado:
>>> type(conjunto2)
<class 'dict'>
Se ha creado un diccionario, estructura que también se rodea entre llaves. Hablaremos de ellos muy pronto.
Para que conjunto2
sea un conjunto vacío debemos proceder del siguiente modo:
>>> conjunto2 = set()
Y ahora sí:
>>> type(conjunto2)
<class 'set'>
Los elementos de un conjunto sólo pueden figurar una vez en él. Observa este otro ejemplo, en el que pese a repetir el número 7 en la definición de conjunto3
, sólo se nos muestra una vez:
>>> conjunto3 = {4, 7, 7, 1}
>>> conjunto3
{1, 4, 7}
Constata, a su vez, como el orden no es significativo.
Lo siguiente que debemos aprender es cómo saber si un determinado elemento pertenece a un conjunto o no. Disponemos para ello del operador in:
>>> 'pimiento' in conjunto1
True
>>> 4 in conjunto1
False
Potentísimo.
La no pertenencia se determina de modo parecido:
>>> 'pepino' not in conjunto1
True
Para finalizar este primer barniz sobre conjuntos, la función len()
, que ya conoces para determinar la longitud de un string o el número de elementos de una lista, sirve también para conocer el cardinal de un conjunto, esto es, el número de elementos que lo componen.
>>> len(conjunto1)
4
>>> len(conjunto2)
0
>>> len(conjunto3)
3
El conjunto vacío, conjunto2
, figura con cardinal cero, como es de esperar.
Suficiente. La próxima vez que hablemos sobre conjuntos te mostraré cómo agregar o retirar elementos de ellos.
>>> ecda = {'python', 'latex', 'armonía', 'mirc', 'musescore'}
>>> 'cocina' in ecda
False
Aunque todo se andará. Espera a ver si no publico mi peculiar receta de patatas bravas…
Javier Montero Gabarró
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.
Excelente explicación! Gracias.
Pero, lo que me gustaria saber y pediria tu ayuda es:
¿Qué hago para que devuelva apenas los elementos no comunes del conjunto?
Campeones = [«Brasil», «México», «Alemania», «Brasil», «EEUU», «México» ]
Bicampeones = ???
Uni_campeones = ?? *
* unicampeones – los que ganaron apenas una vez… ¿Cómo hago?
* bicampeones – los que ganaron dos veces. …
Seria eso:
Unicampeones = Campeones – Bicampeones ????
Gracias
Helio