Conjuntos y Frozensets
Los conjuntos almacenan elementos hasheables únicos con pruebas de pertenencia rápidas. Los frozensets son conjuntos inmutables que puedes usar como claves de diccionario o elementos de otros conjuntos.
Busca en todas las páginas de la documentación
Los conjuntos almacenan elementos hasheables únicos con pruebas de pertenencia rápidas. Los frozensets son conjuntos inmutables que puedes usar como claves de diccionario o elementos de otros conjuntos.
seen: set[int] = set()
for value in [1, 2, 2, 3]:
if value not in seen:
seen.add(value)
a, b = {1, 2, 3}, {3, 4}
union = a | b
only_a = a - bCuándo usar esto:
def unique_preserve_order(items: list[str]) -> list[str]:
seen: set[str] = set()
result: list[str] = []
for item in items:
if item not in seen:
seen.add(item)
result.append(item)
return result
def jaccard(tags_a: set[str], tags_b: set[str]) -> float:
if not tags_a and not tags_b:
return 1.0
return len(tags_a & tags_b) / len(tags_a | tags_b)
def frozen_key(groups: list[frozenset[str]]) -> dict[frozenset[str], int]:
return {group: len(group) for group in groups}
if __name__ == "__main__":
print(unique_preserve_order(["a", "b", "a", "c"]))
print(jaccard({"py", "ml"}, {"py", "web"}))
print(frozen_key([frozenset({"a", "b"}), frozenset({"c"})]))Lo que esto demuestra:
dict.fromkeys no tiene suficiente control de ordenación& y | para intersección y uniónfrozenset como clave de diccionario para agrupacionesa <= b, a < b, a >= b para contención.{x for x in items if cond} construye conjuntos directamente.| Operador | Significado |
|---|---|
| | unión |
& | intersección |
- | diferencia |
^ | diferencia simétrica |
# conjunto vacío - no {}
empty = set()
# añadir en bloque
tags.update(["a", "b", "c"])
# discard vs remove - discard ignora los elementos faltantes
tags.discard("missing"){} es un diccionario vacío - Usa set() para un conjunto vacío. Solución: set() o un marcador de posición {0} solo si es intencional.dict.fromkeys o bucle de deduplicación ordenado.set(s) antes de eliminar en el bucle.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
dict.fromkeys | Claves únicas que preservan el orden | Necesitas álgebra de conjuntos |
list + in | n muy pequeño | Comprobaciones de pertenencia grandes |
bloom filter | Probabilístico a gran escala | Necesitas pertenencia exacta |
pandas.unique | Deduplicación de columnas en dataframes | Script de Python simple |
set cuando el orden no importa y la pertenencia es frecuente. La deduplicación que preserva el orden usa diccionarios o bucles manuales.
Conjunto hasheable - claves de diccionario, elementos de conjunto, claves de caché a partir de frozensets de etiquetas.
from functools import reduce; reduce(set.__and__, sets) o bucle con acc &= s.
Lo mismo para conjuntos; elige el operador o método legible de manera consistente en la base de código.
Sí, si todos los elementos son hasheables y comparables por igualdad; pero perjudica la claridad; prefiere conjuntos homogéneos.
list(dict.fromkeys(items)) - patrón idiomático rápido.
Elementos en uno de los conjuntos pero no en ambos; diferencia concesiones de permisos entre entornos.
{x for x in items if pred(x)} construye el conjunto directamente sin una lista intermedia.
Las operaciones individuales son atómicas en CPython, pero las lecturas-modificaciones-escrituras compuestas necesitan bloqueos.
set.pop() elimina un elemento arbitrario; útil solo cuando cualquier elemento es aceptable.
Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026