Aprende Python · lección gratuita

Lección 16 · Conjuntos (sets)

Resumen

Un conjunto (set) es una colección desordenada y sin elementos duplicados. Es la estructura ideal cuando solo te importa si un valor está presente o no, y cuando necesitas eliminar repetidos o comparar grupos de datos. A diferencia de las listas, los conjuntos no tienen índice y guardan cada valor una sola vez.

Conceptos

Un conjunto se escribe con llaves, igual que un diccionario, pero sin pares clave-valor: simplemente valores sueltos. Como no hay duplicados, los conjuntos son perfectos para responder preguntas como "¿cuántos valores distintos hay?". Ojo con un detalle importante: el conjunto vacío se crea con set() y NO con {}, porque {} crea un diccionario vacío.

Los elementos de un conjunto no están ordenados ni tienen posición, así que no puedes hacer mi_set[0]. Lo que sí puedes hacer es preguntar si un valor pertenece con in, recorrerlo con un bucle, o medir su tamaño con len(). Para obtener una salida predecible al imprimir (los conjuntos no garantizan el orden), conviene convertirlos con sorted(), que devuelve una lista ordenada.

numeros = {3, 1, 2, 2, 3}      # los duplicados desaparecen
print(sorted(numeros))         # [1, 2, 3]
print(2 in numeros)            # True
print(len(numeros))            # 3

Las operaciones entre conjuntos son su gran fortaleza. Imagina dos grupos de personas: con & obtienes quiénes están en ambos, con | obtienes a todos sin repetir, y con - obtienes quiénes están en el primero pero no en el segundo. Cada operación tiene un método equivalente (intersection, union, difference) por si prefieres nombres en lugar de símbolos.

Ejemplos

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

# Unión: todos los elementos, sin repetir
print(sorted(a | b))            # [1, 2, 3, 4, 5, 6]
print(sorted(a.union(b)))       # igual que arriba

# Intersección: solo los comunes
print(sorted(a & b))            # [3, 4]
print(sorted(a.intersection(b)))# [3, 4]

# Diferencia: en a pero no en b
print(sorted(a - b))            # [1, 2]
print(sorted(a.difference(b)))  # [1, 2]

# Eliminar duplicados de una lista
lista = [5, 5, 1, 1, 9]
print(sorted(set(lista)))       # [1, 5, 9]
💡 Para imprimir conjuntos de forma predecible, envuélvelos en sorted(). Como el orden interno de un set no está garantizado, sorted() te da siempre la misma salida ordenada.

Cheatsheet

AcciónSintaxisEjemplo
Crear conjunto{a, b, c}{1, 2, 3}
Conjunto vacíoset()set()
Quitar duplicadosset(lista)set([1,1,2]){1, 2}
Pertenenciavalor in s2 in s
Tamañolen(s)len({1,2})2
Unión`a \b / a.union(b)``{1,2} \{2,3}`
Interseccióna & b / a.intersection(b){1,2} & {2,3}
Diferenciaa - b / a.difference(b){1,2} - {2,3}
Ordenar para imprimirsorted(s)sorted({3,1,2})

---

← Recorrer diccionariosComprehensions →

Ver todas las lecciones de Aprende Python →