Sets en Python: guía completa para principiantes

Publicado el: 11/07/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

    texto 'operadores em Python' com os simbolos de operadores e o logo do Python à direita
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Operadores en Python: tipos y ejemplos prácticos

    Aprende los operadores en Python: aritméticos, comparación, asignación, lógicos, pertenencia, identidad, bits, sets y precedencia.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    texto 'None' centralizado com um fundo com as cores do Pyton
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    None en Python: significado y buenas prácticas

    Aprende qué significa None en Python, cómo compararlo, usar parámetros opcionales, distinguir valores ausentes y evitar errores comunes.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Programador resolvendo problemas com Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Lógica de programación con Python para principiantes

    Aprende lógica de programación con Python: algoritmos, pseudocódigo, variables, condiciones, bucles, funciones, validación y un proyecto práctico.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Código Python com valores Boolean True e False em tela de computador
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Booleanos en Python: True, False y lógica

    Aprende booleanos en Python con True, False, comparaciones, operadores lógicos, valores truthy y falsy, cortocircuito y validación.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Símbolo de repetição ao lado do logotipo do Python pensativo, representando o conceito de loops na programação em Python.
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Bucles en Python: for, while, break y continue

    Aprende bucles en Python con for, while, range, enumerate, zip, break, continue, else, validación y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Código Python mostrando uma função recursiva de fatorial com condição if e chamada da função dentro dela
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Recursión en Python: guía práctica con ejemplos

    Aprende recursión en Python con casos base, pila de llamadas, factorial, árboles, directorios, memoización, límites y alternativas iterativas.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026