Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Conjuntos (La Tolva)

Embudo de conjunto: entran A, B, C, C, A; salen solo A, B, C; los duplicados se eliminan

Fig. 5.4: Un conjunto elimina los duplicados.

El Conjunto (set) es un contenedor con una sola regla, pero inflexible: NO SE ADMITEN DUPLICADOS.

Piénsalo como la tolva del almacén: por dentro, la pared del fondo está dividida en compartimentos, uno para cada objeto distinto que puede caer ahí. Cuando algo entra, la tolva lo manda directo a su compartimento, sin fijarse en el orden de llegada. Si metes una manzana y ya hay una manzana en su compartimento, la segunda cae en el mismo lugar que la primera: no se apilan, no se duplican, simplemente coinciden. Por eso preguntar “¿está la manzana?” no exige revisar la tolva entera: vas derecho al compartimento que le toca, sin importar cuántos objetos haya alrededor. Y como esos compartimentos no están numerados en fila, lo que queda dentro no tiene “primero” ni “último”: ningún índice, ningún orden.

Fortalezas del Conjunto

  1. Unicidad Total: Garantiza que cada elemento aparezca una sola vez.
  2. Operaciones Matemáticas: Puedes hacer uniones, intersecciones y diferencias.

Gestión de la Tolva

1. Construcción

Usamos llaves {} igual que los diccionarios, pero sin los dos puntos :.

# Solo listamos los elementos
invitados: set[str] = {"Ana", "Beto", "Carla"}

¡Ojo!: {} no crea un conjunto vacío, crea un diccionario vacío (las llaves estaban ocupadas antes). Para un conjunto vacío de verdad, usa set().

vacio_mal = {}      # esto es un dict
vacio_bien = set()  # esto sí es un conjunto vacío

2. El Truco de Limpieza

El uso más frecuente de los conjuntos es sanear listas con repetidos. Datos que vienen de formularios, archivos CSV o respuestas de APIs suelen traer duplicados. Un set() los elimina en un solo paso.

lista_sucia = ["Ana", "Beto", "Ana", "Carla", "Beto"]

# Cada nombre repetido cae en su propio compartimento, no en uno nuevo
limpios = set(lista_sucia)
# Resultado: un orden cualquiera (los conjuntos no garantizan orden)

3. Meter, Sacar y Preguntar

Un conjunto crece con .add() y se reduce con .discard() (que ni se inmuta si el elemento no estaba):

invitados: set[str] = {"Ana", "Beto", "Carla"}

invitados.add("Diego")
invitados.discard("Beto")

Lo que de verdad lo distingue es la pregunta in. Como cada elemento tiene su propio compartimento, comprobar si algo está dentro no exige recorrer el conjunto entero: vas directo al lugar que le toca. Cuando solo te importa “¿está o no está?”, un set le gana a una lista, que sí tiene que revisar sus cajas una por una.

invitados: set[str] = {"Ana", "Beto", "Carla"}

print("Ana" in invitados)   # True, en tiempo constante

4. Operaciones de Conjunto

Aquí está la otra razón para usarlos: combinar grupos como en los diagramas de Venn de la escuela.

turno_manana = {"Ana", "Beto", "Carla"}
turno_tarde  = {"Beto", "Diego"}

print(turno_manana | turno_tarde)  # Unión: {"Ana", "Beto", "Carla", "Diego"}
print(turno_manana & turno_tarde)  # Intersección: {"Beto"}
print(turno_manana - turno_tarde)  # Diferencia: {"Ana", "Carla"}

¡Ojo!: Como los conjuntos no tienen orden, no puedes pedir invitados[0]. Te dará un error porque el concepto de “posición 0” no existe aquí.