Conjuntos (sets) en Python: operaciones, métodos y casos de uso
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Imagina que eres docente y estás pasando lista. Un estudiante firma la hoja de asistencia dos veces sin querer. ¿Significa eso que está dos veces en clase? Claro que no. Solo te importa quién vino, no cuántas veces escribió su nombre.
Un conjunto de Python (en inglés, set) funciona igual. Es una colección que elimina los duplicados automáticamente. Cada elemento de un conjunto es único. A los conjuntos tampoco les importa el orden: solo les importa la pertenencia, es decir, si un elemento está o no.
En esta lección aprenderás a crear conjuntos, a hacer operaciones potentes como la unión y la intersección, a modificarlos con métodos y a reconocer cuándo un conjunto es la herramienta perfecta.
Cómo crear un conjunto en Python
Para crear un conjunto, escribe los elementos entre llaves {}, separados por comas. Si añades valores duplicados, Python los ignora sin decir nada.
{'apple', 'banana', 'cherry'}
{'red', 'green', 'blue'}Fíjate en que el orden de la salida puede ser distinto del que escribiste. Los conjuntos no tienen orden, así que Python puede guardar los elementos internamente en cualquier disposición. No cuentes con que un conjunto mantenga un orden concreto.
También puedes crear un conjunto a partir de una lista con el constructor set(). Es una forma muy popular de eliminar los duplicados de una lista.
{'Bob', 'Alice', 'Charlie'}
{'o', 'l', 'e', 'h'}Operaciones con conjuntos: unión, intersección y diferencia
La verdadera potencia de los conjuntos está en las operaciones de conjuntos. Te permiten combinar conjuntos, compararlos y encontrar sus diferencias. Piensa en ellas como los diagramas de Venn de la clase de matemáticas.
Unión: combinarlo todo
La unión te da todos los elementos de ambos conjuntos, sin duplicados. Puedes usar el operador | o el método .union().
{'Charlie', 'Bob', 'Alice', 'Diana'}
{'Charlie', 'Bob', 'Alice', 'Diana'}Intersección: encontrar lo que tienen en común
La intersección te da solo los elementos que aparecen en ambos conjuntos. Usa el operador & o .intersection().
{'Bob', 'Charlie'}Diferencia: lo que solo está en un conjunto
La diferencia te da los elementos que están en el primer conjunto pero no en el segundo. Usa el operador - o .difference(). Aquí el orden importa.
{'Alice'}
{'Diana'}Diferencia simétrica: en uno de los dos, pero no en ambos
La diferencia simétrica te da los elementos que están en uno u otro conjunto, pero no en ambos. Piensa en ella como lo contrario de la intersección. Usa el operador ^ o .symmetric_difference().
{'Alice', 'Diana'}Cómo añadir y eliminar elementos de un conjunto
Los conjuntos son mutables: puedes añadir y eliminar elementos después de crearlos. Estos son los métodos clave que vas a usar.
{'apple', 'banana', 'cherry'}
{'date', 'elderberry', 'apple', 'banana', 'cherry'}
{'date', 'elderberry', 'apple', 'cherry'}
{'date', 'elderberry', 'apple', 'cherry'}También puedes vaciar el conjunto por completo o sacar de él un elemento cualquiera.
Removed: 50
Remaining: {20, 40, 10, 30}
set()Por qué los conjuntos son rapidísimos para buscar elementos
Una de las mejores razones para usar un conjunto es comprobar si algo existe. La palabra clave in funciona tanto con listas como con conjuntos, pero los conjuntos son muchísimo más rápidos.
bob is allowed! eve is not on the list.
¿Qué son los frozensets?
Un frozenset es una versión inmutable de un conjunto. Una vez creado, no puedes añadir ni eliminar elementos. Esto hace que los frozensets sean hashables, es decir, que se pueden usar como claves de diccionario o guardar dentro de otros conjuntos.
frozenset({'u', 'o', 'i', 'e', 'a'})
frozenset({'u', 'o', 'i', 'f', 'g', 'd', 'e', 'b', 'c', 'a'})¿Cuándo usar un conjunto en lugar de una lista?
Los conjuntos y las listas resuelven problemas distintos. Una regla sencilla: si te importa el orden o los duplicados, usa una lista. Si te importa que los elementos sean únicos o que las búsquedas sean rápidas, usa un conjunto.
# Order matters
playlist = ['song1', 'song2', 'song3']
# Duplicates are meaningful
die_rolls = [3, 5, 3, 2, 5, 6]
# You need index access
first = playlist[0]# Only unique items matter
tags = {'python', 'coding', 'tutorial'}
# Fast membership checks
if 'python' in tags:
print('Found!')
# Removing duplicates
unique = set([1, 2, 2, 3, 3])Ejercicios de práctica
Tienes una lista de direcciones de correo electrónico en la que algunas aparecen más de una vez. Crea un conjunto llamado unique_emails a partir de la lista emails e imprímelo ordenado alfabéticamente con sorted().
¿Qué imprime este código? Piensa bien en cómo tratan los conjuntos los duplicados y en qué devuelve la función len().
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = set(data)
print(len(unique))Escribe una instrucción print() con la salida exacta.
Tienes dos conjuntos: math y english. Encuentra e imprime los estudiantes inscritos en ambas clases. Imprime el resultado como una lista ordenada.
Este código intenta crear un conjunto vacío, añadirle elementos e imprimir el resultado. Pero tiene un error: quien lo escribió usó {} para crear un conjunto vacío. Corrige el error para que el código funcione bien.
Tienes un conjunto recipe con todos los ingredientes necesarios y un conjunto pantry con lo que ya tienes en la despensa. Encuentra los ingredientes que todavía tienes que comprar e imprímelos como una lista ordenada.
Escribe una función llamada dedupe(items) que elimine los duplicados de una lista sin perder el orden original. Usa un conjunto para llevar la cuenta de los elementos que ya has visto. Devuelve la lista sin duplicados.
Pruébala llamando a print(dedupe([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])).