Sets: valores únicos, unión e intersección

Actualizado el: 20/08/2026
Tempo de leitura: 4 minutos
Ilustração representando conjuntos (sets) em Python

Un set en Python es una colección mutable de elementos únicos. Resulta especialmente útil para eliminar duplicados, comprobar pertenencia y realizar operaciones matemáticas como unión, intersección y diferencia. A diferencia de una lista, no debes depender de una posición ni de un orden de presentación fijo.

En esta guía aprenderás a crear sets, añadir y eliminar valores, comparar colecciones, trabajar con frozenset, construir comprensiones y elegir esta estructura frente a listas o diccionarios. El tutorial oficial sobre conjuntos en Python introduce sus operaciones principales, y la documentación de set y frozenset contiene la referencia completa.

Crear un set

lenguajes = {"Python", "JavaScript", "Go"}
print(lenguajes)

Los elementos repetidos se conservan una sola vez:

etiquetas = {"python", "datos", "python", "api"}
print(etiquetas)

Para crear un conjunto vacío debes usar set(). Las llaves vacías crean un diccionario:

conjunto_vacio = set()
diccionario_vacio = {}

print(type(conjunto_vacio))
print(type(diccionario_vacio))

Convertir una lista y eliminar duplicados

numeros = [4, 2, 4, 1, 2, 5]
unicos = set(numeros)

print(unicos)

La conversión elimina duplicados, pero no garantiza conservar el orden original. Cuando necesitas valores únicos en el mismo orden de aparición, un diccionario puede ser más adecuado:

unicos_ordenados = list(dict.fromkeys(numeros))

La comparación entre estructuras aparece en la guía de lista, tupla, set y diccionario.

Comprobar pertenencia

permisos = {"leer", "editar", "publicar"}

if "editar" in permisos:
    print("El usuario puede editar")

Los sets utilizan una tabla hash y suelen ser apropiados para muchas comprobaciones repetidas. La guía del operador in en Python explica las diferencias entre listas, sets y diccionarios.

Añadir elementos

colores = {"azul", "verde"}
colores.add("rojo")
colores.add("azul")

print(colores)

add() añade un único elemento. Si ya existe, el set no cambia.

Añadir varios valores con update()

colores = {"azul"}
colores.update(["verde", "rojo"], {"amarillo"})

print(colores)

update() recibe uno o varios iterables y añade cada elemento.

Eliminar elementos

usuarios = {"ana", "luis", "marta"}

usuarios.remove("luis")
usuarios.discard("carlos")
print(usuarios)
  • remove() lanza KeyError si el elemento no existe.
  • discard() no produce error cuando falta.
  • pop() elimina y devuelve un elemento arbitrario.
  • clear() elimina todos los elementos.

Elige remove() cuando la ausencia represente un error lógico y discard() cuando eliminar un valor inexistente sea aceptable.

Unión

equipo_a = {"Ana", "Luis", "Marta"}
equipo_b = {"Marta", "Carlos"}

personas = equipo_a | equipo_b
# equivalente: equipo_a.union(equipo_b)
print(personas)

La unión contiene los valores presentes en cualquiera de los conjuntos.

Intersección

comunes = equipo_a & equipo_b
# equivalente: equipo_a.intersection(equipo_b)
print(comunes)

La intersección conserva solamente los valores presentes en ambos.

Diferencia

solo_a = equipo_a - equipo_b
print(solo_a)

La diferencia no es simétrica: a - b puede producir un resultado distinto de b - a.

Diferencia simétrica

exclusivos = equipo_a ^ equipo_b
print(exclusivos)

La diferencia simétrica contiene los elementos que aparecen en uno de los conjuntos, pero no en ambos.

Subconjuntos y superconjuntos

permisos_basicos = {"leer"}
permisos_editor = {"leer", "editar", "publicar"}

print(permisos_basicos <= permisos_editor)
print(permisos_editor >= permisos_basicos)
print(permisos_basicos < permisos_editor)

Estas comparaciones son útiles para permisos, requisitos y grupos de características.

Comprobar conjuntos disjuntos

roles_publicos = {"lector", "autor"}
roles_admin = {"administrador", "superusuario"}

print(roles_publicos.isdisjoint(roles_admin))

isdisjoint() devuelve verdadero cuando no existe ningún elemento común.

Qué elementos puede contener un set

Los elementos deben ser hashables. Los números, strings, bytes, tuplas inmutables y frozenset suelen ser válidos. Las listas y diccionarios no lo son:

coordenadas = {(10, 20), (30, 40)}

# Esto produce TypeError:
# valores = {[1, 2], [3, 4]}

Un objeto hashable debe mantener un hash estable mientras pertenece al conjunto.

frozenset: conjunto inmutable

permisos = frozenset({"leer", "editar"})
print(permisos)

frozenset admite operaciones de conjunto, pero no add() ni remove(). Puede utilizarse como clave de diccionario o elemento de otro set.

grupos = {
    frozenset({"ana", "luis"}),
    frozenset({"marta", "carlos"}),
}

Comprensiones de sets

numeros = range(10)
restos = {numero % 3 for numero in numeros}
cuadrados_pares = {
    numero ** 2
    for numero in numeros
    if numero % 2 == 0
}

print(restos)
print(cuadrados_pares)

Una comprensión elimina automáticamente los resultados repetidos. La guía de comprensiones en Python explica transformaciones y filtros.

Ejemplo: comparar inventarios

inventario_sistema = {"A101", "A102", "A103", "A105"}
inventario_archivo = {"A101", "A103", "A104", "A105"}

faltan_en_archivo = inventario_sistema - inventario_archivo
sobran_en_archivo = inventario_archivo - inventario_sistema
coinciden = inventario_sistema & inventario_archivo

print("Faltan:", faltan_en_archivo)
print("Sobran:", sobran_en_archivo)
print("Coinciden:", coinciden)

Este patrón sirve para sincronizar usuarios, productos, permisos o identificadores.

Ejemplo: palabras únicas

texto = "Python facilita aprender Python y automatizar tareas"

palabras = {
    palabra.strip(".,;:!?¡¿").casefold()
    for palabra in texto.split()
}

print(palabras)
print(len(palabras))

En análisis real de texto puede ser necesario tratar signos, Unicode y palabras vacías con reglas más completas.

Sets y diccionarios

Un set almacena valores únicos. Un diccionario almacena claves únicas asociadas a valores. Si necesitas saber solamente si un identificador existe, un set comunica mejor la intención. Si necesitas recuperar información asociada, utiliza un diccionario. La guía de diccionarios en Python amplía esta estructura.

Modificar durante la iteración

No modifiques el tamaño de un set mientras lo recorres. Crea una copia o una nueva colección:

numeros = {1, 2, 3, 4, 5}

for numero in numeros.copy():
    if numero % 2 == 0:
        numeros.remove(numero)

print(numeros)

Una comprensión suele ser todavía más clara:

impares = {numero for numero in numeros if numero % 2 != 0}

Errores frecuentes

  • Usar {} para crear un set vacío.
  • Esperar que conserve un orden de presentación fijo.
  • Intentar guardar listas o diccionarios como elementos.
  • Usar remove() cuando la ausencia es normal.
  • Confundir la dirección de una diferencia.
  • Modificar el conjunto durante el recorrido.
  • Convertir a set cuando es necesario preservar duplicados u orden.

Cuándo usar un set

  • Eliminar duplicados cuando el orden no importa.
  • Realizar muchas pruebas de pertenencia.
  • Comparar grupos de identificadores.
  • Calcular unión, intersección o diferencia.
  • Representar permisos, etiquetas o características únicas.

Conclusión

Los sets en Python representan colecciones de elementos únicos y permiten comparar grupos con operaciones claras. Son una buena elección para pertenencia, eliminación de duplicados, permisos e inventarios, pero no sustituyen a listas ordenadas ni a diccionarios con información asociada.

Elige la estructura según el significado de los datos. Cuando lo importante es la unicidad y la relación entre grupos, un set suele producir una solución más corta, expresiva y eficiente.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    notebook com código saindo da tela
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Variables: asignación, tipos y alcance en Python

    Aprende variables en Python: asignación, nombres, tipos, conversiones, referencias, mutabilidad, alcance, constantes, None y errores frecuentes.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Diferença entre operadores is e == em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    == vs is en Python: igualdad vs identidad

    Entiende la diferencia entre == e is en Python, igualdad, identidad, None, interning, copias superficiales, deepcopy y objetos personalizados.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Menu interativo no terminal criado com Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Menú interactivo en terminal con Python

    Crea un menú interactivo en Python con while, funciones, diccionarios, validación, submenús, persistencia JSON y manejo seguro de errores.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    ícone de loop com o texto 'While' abaixo
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    while: repite acciones con condiciones en Python

    Aprende bucles while en Python con condiciones, validación, menús, break, continue, else, centinelas, reintentos y buenas prácticas.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Imagem de um quadro negro com várias interrogações no lugar de lâmpadas, e uma lâmpada conectada no meio
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    if, elif y else: lógica condicional en Python

    Aprende if, elif y else en Python con comparaciones, operadores lógicos, validación, rangos, menús, retornos tempranos y pruebas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação de dados JSON em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    JSON en Python: leer, escribir y validar datos

    Aprende JSON en Python con load, loads, dump, dumps, archivos UTF-8, validación, APIs, Decimal, fechas y escritura segura.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026