Menu

Sets en Python: elementos únicos, unión, intersección y diferencia

Cuándo recurrir a un set de Python — unicidad, comprobaciones rápidas con in y las operaciones de estilo matemático (unión, intersección, diferencia) que hacen potentes a los sets.

Un set es una bolsa sin orden de elementos únicos

Donde las listas y las tuplas se preocupan por el orden, los sets no. Donde las listas permiten que los duplicados se apilen, los sets los descartan silenciosamente. El set es la estructura de datos correcta cuando tienes dos necesidades específicas:

  1. Quieres elementos únicos, punto.
  2. Quieres comprobar pertenencia rápido.

Escribe uno con llaves:

main.py
Output
Click Run to see the output here.

El "red" y "green" duplicados en el segundo set simplemente desaparecen. No es un error — es justo el objetivo.

Crear sets

Las dos formas que realmente usarás:

main.py
Output
Click Run to see the output here.

Ese último punto pilla a todo el mundo una vez: {} crea un diccionario vacío, no un set vacío. La ambigüedad sintáctica tenía que caer en uno de los dos, y ganaron los dicts.

Añadir y quitar

main.py
Output
Click Run to see the output here.

remove vs discard es la distinción clave: remove insiste en que el elemento esté; a discard le da igual. Elige según si la ausencia del elemento debe ser un error.

Pertenencia rápida

Aquí es donde los sets realmente se ganan su sitio. x in some_set se ejecuta en tiempo constante, sin importar lo grande que sea el set. x in some_list tiene que recorrer la lista, lo que se vuelve lento cuando la lista es grande.

main.py
Output
Click Run to see the output here.

Regla general: cada vez que te encuentres escribiendo if x in some_list dentro de un bucle, y la lista tenga más de unas docenas de elementos, convierte la lista a set primero.

Matemáticas de sets

Aquí es donde los sets se ponen genuinamente divertidos. Puedes combinarlos con operadores que reflejan operaciones matemáticas de conjuntos:

main.py
Output
Click Run to see the output here.

Cada operador también tiene una forma con método (.union(), .intersection(), .difference(), .symmetric_difference()). Los operadores son más compactos; los métodos aceptan cualquier iterable, no solo otro set.

Deduplicar una lista

Uno de los usos más comunes de los sets, incluso fuera de la "lógica de conjuntos":

main.py
Output
Click Run to see the output here.

Una línea, duplicados fuera. Una cosa a tener en cuenta: el orden no se preserva. Si necesitas unicidad y el orden original, usa dict.fromkeys() en su lugar:

main.py
Output
Click Run to see the output here.

Los dicts preservan el orden de inserción en Python moderno, y dict.fromkeys construye uno usando los elementos del iterable como claves — efectivamente un set ordenado.

Subconjuntos y superconjuntos

Comprobar si un set está contenido en otro:

main.py
Output
Click Run to see the output here.

Estos aparecen en cosas como comprobaciones de permisos ("¿tiene este usuario todos los roles requeridos?").

Qué puede ir en un set

Solo elementos hasheables. Es un término técnico — en la práctica, significa:

  • Las cosas inmutables son hasheables: números, strings, tuplas de hasheables, frozensets.
  • Las cosas mutables no lo son: listas, dicts, otros sets no pueden ser miembros de set.
main.py
Output
Click Run to see the output here.

Si necesitas un set de sets, usa frozenset — es una versión inmutable de set.

La iteración no tiene orden

Iterar sobre un set te da los elementos sin orden garantizado:

main.py
Output
Click Run to see the output here.

Ejecútalo unas cuantas veces y verás que el orden varía. Si el orden importa, un set no es la estructura correcta — ordena el contenido cuando lo necesites, o usa una lista.

Cuándo no usar un set

Si alguna de estas es verdadera, una lista o dict probablemente encaje mejor:

  • Te importa el orden.
  • Necesitas guardar duplicados.
  • Cada elemento tiene datos asociados (usa un dict con el elemento como clave).

Seguimos

Los sets manejan unicidad y pertenencia. Los diccionarios — que vienen ahora — manejan el patrón más amplio de "busca un valor por una clave", que probablemente es la estructura de datos no-lista más útil en Python.

Preguntas frecuentes

¿Qué es un set en Python?

Un set es una colección sin orden de elementos únicos. Los sets usan llaves sin pares clave-valor: colors = {'red', 'green', 'blue'}. Añadir el mismo valor dos veces no tiene efecto — los duplicados se descartan silenciosamente.

¿Cuándo debería usar un set en lugar de una lista?

Usa un set cuando te importe la unicidad o cuando vayas a hacer muchas comprobaciones de pertenencia (x in collection). Los sets quitan duplicados automáticamente y comprueban pertenencia en tiempo constante, lo que para colecciones grandes es una mejora enorme sobre las listas.

¿Cómo creo un set vacío en Python?

Usa set(), no {} — las llaves sin nada dentro crean un diccionario vacío, no un set vacío. Una vez que tienes un set, puedes añadir elementos con .add(value).

Aprende a programar con Coddy

COMENZAR