Estructuras de datos

Conjuntos (set)


Los sets en Python son una estructura de datos similar a las listas o tuplas, pero con propiedades únicas que los hacen ideales para trabajar con colecciones no repetidas de elementos. Están basados en la teoría de conjuntos de las matemáticas, lo que permite realizar operaciones como unión, intersección y diferencia.

Características de los sets:
  • No contienen elementos duplicados: cada valor debe ser único.
  • No tienen un orden específico: el orden puede variar en cada ejecución.
  • Sus elementos deben ser inmutables (por ejemplo, no pueden contener listas o diccionarios).
  • No son indexables: no se puede acceder a sus elementos por posición como en listas o tuplas.

¿Cómo crear un set?

Existen dos formas principales:

Usando la función set() con un iterable como una lista:

numeros = set([4, 5, 6, 8, 8, 4])
print(numeros)  # {8, 4, 5, 6}

Utilizando llaves {} directamente (no confundir con diccionarios, que tienen pares clave:valor):

colores = {"rojo", "verde", "azul"}
print(colores)  # {'verde', 'azul', 'rojo'}


Operaciones básicas con sets:

Recorrer un set:
for color in colores:
    print(color)
Verificar si un elemento está presente:
print("rojo" in colores)   # True
print("negro" in colores)  # False
Obtener la cantidad de elementos:
print(len(colores))  # 3
Los sets no permiten modificar elementos por índice:
# colores[0] = "amarillo"  → TypeError
Los elementos deben ser inmutables:
set_invalido = {1, 2, [3, 4]}  # TypeError: unhashable type: 'list'

Operaciones de conjuntos (matemáticas):

1. Unión:

Une dos sets (sin duplicados):

a = {1, 2, 3}
b = {3, 4, 5}
print(a | b)             # {1, 2, 3, 4, 5}
print(a.union(b))        # {1, 2, 3, 4, 5}
2. Intersección:

Elementos comunes entre dos sets:

print(a & b)                 # {3}
print(a.intersection(b))    # {3}
3. Diferencia:

Elementos que están en a pero no en b:

print(a - b)               # {1, 2}
print(a.difference(b))     # {1, 2}
4. Diferencia simétrica:

Elementos que están en uno u otro, pero no en ambos:

print(a ^ b)                         # {1, 2, 4, 5}
print(a.symmetric_difference(b))    # {1, 2, 4, 5}

Métodos comunes de los sets:

1. add():

Agrega un elemento al set:

colores.add("amarillo")
print(colores)
2. remove():

Elimina un elemento. Lanza error si no existe:

colores.remove("rojo")  # Funciona
# colores.remove("negro")  # KeyError
    3. discard():

    Elimina un elemento, sin error si no existe:

    colores.discard("negro")  # No lanza error
    4. pop():
  1. Elimina un elemento aleatorio del set:

    elemento = colores.pop()
    print("Elemento eliminado:", elemento)
    5. clear():

    Elimina todos los elementos:

    colores.clear()
    print(colores)  # set()

    ¿Cuándo usar sets?

    Los sets son ideales cuando:

    • Necesitamos eliminar duplicados de una colección.
    • Queremos comprobar si un elemento está presente de forma rápida.
    • Realizamos operaciones matemáticas entre grupos de elementos (unión, intersección, etc.).
    • No necesitamos mantener el orden de los elementos.