14 · Sets: unicidad, membresía y álgebra de conjuntos
Elimina duplicados en una llamada, comprueba membresía en O(1) y encuentra discrepancias de etiquetas con una sola resta.
Un set es una **colección desordenada de elementos únicos** — agregar el mismo valor dos veces no tiene efecto, y las comprobaciones con `in` se ejecutan en O(1) independientemente del tamaño.
Sin esto:
Sin sets, eliminar duplicados de una lista de IDs de entrenamiento requiere un bucle con un rastreador 'seen'; verificar si una etiqueta existe en un vocabulario requiere escanear toda la lista — O(n) por búsqueda.
Un literal de set usa llaves: {1, 2, 3}. Importante: {} crea un diccionario vacío, no un set — usa set() para un set vacío. Los sets son mutables (.add(), .remove(), .discard()), desordenados (sin indexación) y solo almacenan valores hasheables. El poder clave es la prueba de membresía O(1) y los operadores de álgebra de conjuntos integrados.
Python (in browser)
El ciclo `list(set(x))` es idiomático para deduplicación, pero recuerda que el orden de salida no está garantizado. Ordena después si el orden importa.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`-` es diferencia de conjuntos, `&` es intersección, `|` es unión, `^` es diferencia simétrica. Se leen exactamente como operaciones de diagrama de Venn.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Con 50 000 elementos el set es típicamente 100–500× más rápido. La brecha se amplía linealmente con el tamaño de la lista — con 500 000 elementos la lista es ~10× más lenta todavía.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
¿Qué devuelve `{1, 2, 2, 3} == {1, 2, 3}`?
- `set()` crea un set vacío — `{}` es un dict vacío. Los sets almacenan valores únicos hasheables y admiten pruebas de membresía O(1).
- Álgebra de conjuntos: `|` unión, `&` intersección, `-` diferencia, `^` diferencia simétrica. Estas son las operaciones del diagrama de Venn.
- Los sets son desordenados — nunca dependas del orden de iteración. Usa `dict.fromkeys()` para valores únicos con orden estable.
Deduplicar una lista de rutas de archivos de entrenamiento antes de cargarlos: `unique_paths = list(set(all_paths))`. Comparar vocabularios de etiquetas entre las particiones de entrenamiento y prueba: `set(train_labels) - set(test_labels)` revela clases en las que el modelo nunca será evaluado. Construir un vocabulario de palabras: `vocab = set(token for sentence in corpus for token in sentence.split())`.
Si lo quitas: Sin sets, cada comprobación de membresía en un vocabulario de 50 000 tokens es O(n) — para un corpus de 1 millón de oraciones eso agregaría aproximadamente 50 mil millones de comparaciones solo a la tokenización.