Sets (conjuntos)
Los sets son colecciones sin duplicados y sin orden. Son la herramienta ideal para deduplicar datos, verificar pertenencia instantáneamente y hacer operaciones matemáticas de conjuntos (unión, intersección, diferencia).
Concepto teórico
¿Qué es un set?
Un set (conjunto) es una colección desordenada de elementos únicos. Cuando
agregás un elemento que ya existe, el set simplemente lo ignora. Se crean con llaves {} o con la
función set().
colores = {"rojo", "azul", "verde", "rojo", "azul"}
print(colores) # {"rojo", "azul", "verde"} — sin duplicados
# ¡CUIDADO! {} crea un dict vacío, NO un set
vacio_dict = {} # esto es un diccionario vacío
vacio_set = set() # esto es un set vacío
s[0] da
error). (3) Pertenencia O(1) — verificar si un elemento está es instantáneo, sin importar el tamaño del
set. En una lista de 1 millón de elementos, buscar con in recorre toda la lista (O(n)). En un set,
es O(1).¿Para qué sirven en análisis de datos?
- Deduplicar:
unicos = set(lista_con_duplicados)— elimina duplicados al instante. ¿Cuántos clientes únicos hay?len(set(lista_clientes)) - Buscar rápido: si tenés una lista negra de CUITs y necesitás verificar millones de transacciones, convertir la lista a set hace la búsqueda 10,000x más rápida.
- Comparar grupos: ¿qué clientes tienen tarjeta Y préstamo? (intersección). ¿Qué clientes tienen tarjeta PERO NO préstamo? (diferencia). Sets resuelven esto en una línea.
- Validar datos: ¿todos los valores de una columna están en una lista de valores permitidos? Sets te dan la respuesta instantánea.
Operaciones de conjuntos
Los sets soportan las operaciones matemáticas clásicas de teoría de conjuntos. Esto es extremadamente poderoso para análisis de datos:
| Operación | Operador | Método | Resultado |
|---|---|---|---|
| Unión | A | B |
A.union(B) |
Elementos que están en A O en B (o ambos) |
| Intersección | A & B |
A.intersection(B) |
Elementos que están en A Y en B |
| Diferencia | A - B |
A.difference(B) |
Elementos que están en A pero NO en B |
| Diferencia simétrica | A ^ B |
A.symmetric_difference(B) |
Elementos que están en A o B, pero NO en ambos |
| Subconjunto | A <= B |
A.issubset(B) |
True si todos los elementos de A están en B |
tarjeta & prestamo te da los que tienen ambos productos (cross-sell
existente). tarjeta - prestamo te da a quiénes ofrecerles un préstamo (oportunidad de cross-sell).
Esto se resuelve con pandas también, pero el concepto de base son sets.Mutabilidad y frozenset
Los sets normales son mutables: podés agregar con .add() y eliminar con
.remove() o .discard(). La diferencia entre remove y
discard: remove da error si el elemento no existe; discard no.
frozenset es la versión inmutable: una vez creado, no se puede modificar. Se puede usar como clave
de diccionario o como elemento de otro set.
{}. Eso crea un DICCIONARIO
vacío. Para un set vacío usá set(). Es una trampa de sintaxis de Python que confunde a todos al
principio.if id in lista_de_10mil es
lento. if id in set_de_10mil es instantáneo. Esta optimización puede transformar un script de
minutos a segundos.Ejemplos explicados paso a paso
Ejemplo 1: Crear sets y deduplicar
Hacé clic en ▶ Ejecutar
Ejemplo 2: Operaciones de conjuntos
Resolvé preguntas de negocio con operaciones de conjuntos.
Hacé clic en ▶ Ejecutar
Ejemplo 3: Agregar, eliminar y modificar
Hacé clic en ▶ Ejecutar
Ejemplo 4: Pertenencia O(1) vs O(n) — performance real
Demostramos que buscar en un set es instantáneo vs buscar en una lista.
Hacé clic en ▶ Ejecutar
Ejemplo 5: Validación de datos con sets
Verificar que los datos estén dentro de valores permitidos — un patrón clásico de calidad de datos.
Hacé clic en ▶ Ejecutar
Referencia rápida
| Operación | Sintaxis | Nota |
|---|---|---|
| Crear | {1, 2, 3} o set([1,2,3]) |
{} crea dict, no set |
| Set vacío | set() |
Nunca {} |
| Agregar uno | s.add(x) |
Ignora si ya existe |
| Agregar varios | s.update(iterable) |
Desde lista, set, etc. |
| Eliminar (error) | s.remove(x) |
KeyError si no existe |
| Eliminar (seguro) | s.discard(x) |
No da error |
| Pertenencia | x in s |
O(1) — instantáneo |
| Unión | A | B |
En A o en B |
| Intersección | A & B |
En A y en B |
| Diferencia | A - B |
En A pero no en B |
| Dif. simétrica | A ^ B |
En A o B, no ambos |
| Subconjunto | A <= B |
A está contenido en B |
| Deduplicar lista | list(set(lista)) |
Pierde el orden original |
Ejercicios
Ejercicio 1: Deduplicar una lista
Dada ids = [101, 203, 101, 305, 203, 101, 407, 305], encontrá cuántos IDs únicos hay. Debe
incluir 4.
Hacé clic en ▶ Ejecutar
Ejercicio 2: Agregar y verificar pertenencia
Creá un set frutas con 3 elementos. Agregá "mango" con .add(). Verificá si "banana"
está en el set. Debe incluir True o False.
Hacé clic en ▶ Ejecutar
Ejercicio 3: Intersección de dos sets
Dados equipo_a = {"García", "López", "Pérez"} y
equipo_b = {"López", "Sosa", "García"}, encontrá los que están en ambos equipos. Debe incluir
López.
Hacé clic en ▶ Ejecutar
Ejercicio 4: Diferencia — encontrar exclusivos
Clientes con tarjeta: {"García","López","Pérez","Sosa"}. Con préstamo:
{"López","Luna","Pérez"}. Encontrá los que tienen tarjeta pero NO préstamo (oportunidad de
cross-sell). Debe incluir Sosa.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Valores únicos y conteo
Dada
operaciones = ["compra","venta","compra","compra","transferencia","venta","compra","retiro"],
encontrá cuántos tipos distintos de operación hay y cuáles son. Debe incluir 4.
Hacé clic en ▶ Ejecutar
Ejercicio 6: Unión de tres sets
Tenés clientes por sucursal: BsAs = {"A","B","C"}, Córdoba = {"C","D","E"}, Rosario
= {"A","E","F"}. Encontrá el total de clientes únicos y los que están en las 3 sucursales. Debe
incluir 6.
Hacé clic en ▶ Ejecutar
Ejercicio 7: Validar datos con set de permitidos
Tenés MONEDAS_VALIDAS = {"ARS","USD","EUR","BRL"}. Validá estas transacciones:
["ARS","USD","GBP","ARS","JPY","EUR"]. Imprimí cuáles son inválidas. Debe incluir
GBP.
Hacé clic en ▶ Ejecutar
Ejercicio 8: Análisis de productos por cliente
Creá un diccionario donde las claves son nombres de clientes y los valores son sets de productos. Encontrá
quién tiene más productos y cuál es el producto más popular (el que tiene más clientes). Debe incluir
popular.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Set comprehension
Dada montos = [1500, -200, 3000, 1500, -200, 4500, 3000], creá un set comprehension con solo los
montos positivos únicos y calculá su suma. Debe incluir 9000.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Análisis completo de cross-sell bancario
Tenés 4 sets de clientes por producto: cuenta_corriente, tarjeta_credito, prestamo_personal, plazo_fijo.
Generá un reporte que incluya: total de clientes únicos, clientes con los 4 productos, clientes con solo
cuenta (sin ningún otro producto), y la oportunidad de cross-sell más grande (el par de productos con más
clientes que tienen uno pero no el otro). Debe incluir CROSS-SELL.
Hacé clic en ▶ Ejecutar
Resumen y conexión
- Los sets guardan elementos únicos y desordenados. Se crean con
{}oset(). set()para vacío —{}crea un dict, no un set.- Deduplicar:
set(lista). Contar únicos:len(set(lista)). - Operaciones de conjuntos:
|(unión),&(intersección),-(diferencia),^(simétrica). - Buscar con
ines O(1) en sets vs O(n) en listas — diferencia abismal en datos grandes. .add()agrega,.discard()elimina sin error,.remove()elimina con error si no existe.
En la siguiente lección (12 · Métodos de strings) vas a aprender todas las formas de transformar, buscar y formatear texto — habilidades esenciales para limpiar datos del mundo real.
Recursos: Python docs — Sets · Set methods