QuieroProgramar por Rodri Gonzalez
Python · Lección 11 de 27

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).

60–80 min Prerrequisitos: 08 Listas, 10 Diccionarios
01

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
Las 3 propiedades clave de los sets: (1) Sin duplicados — automáticamente elimina repetidos. (2) Sin orden — no podés acceder por índice (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?

Analogía: pensá en un set como la lista de asistencia de una reunión. Si alguien firma dos veces, no cuenta doble — el nombre aparece una sola vez. Y para ver si alguien asistió, no necesitás recorrer toda la lista: buscás directamente por su nombre.

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
Caso real en banca: tenés el set de clientes con tarjeta de crédito y el set con préstamo personal. 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.

Error común: crear un set vacío con {}. 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.
Tip de performance: si necesitás hacer muchas verificaciones de pertenencia (¿este ID está en mi lista?), SIEMPRE convertí la lista a set primero. 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.
02

Ejemplos explicados paso a paso

Ejemplo 1: Crear sets y deduplicar

ejemplo_01_crear.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: Operaciones de conjuntos

Resolvé preguntas de negocio con operaciones de conjuntos.

ejemplo_02_operaciones.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: Agregar, eliminar y modificar

ejemplo_03_modificar.pyPython

        
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.

ejemplo_04_performance.pyPython

        
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.

ejemplo_05_validacion.pyPython

        
Hacé clic en ▶ Ejecutar
03

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
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Deduplicar una lista

Dada ids = [101, 203, 101, 305, 203, 101, 407, 305], encontrá cuántos IDs únicos hay. Debe incluir 4.

ejercicio_01.pyDebe incluir "4"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

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.

ejercicio_02.pyDebe incluir True o False

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

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.

ejercicio_03.pyDebe incluir "García"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

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.

ejercicio_04.pyDebe incluir "Sosa"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

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.

ejercicio_05.pyDebe incluir "4"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

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.

ejercicio_06.pyDebe incluir "6"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

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.

ejercicio_07.pyDebe incluir "GBP"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

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.

ejercicio_08.pyDebe incluir "popular"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

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.

ejercicio_09.pyDebe incluir "9000"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

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.

ejercicio_10_desafio.pyDebe incluir "CROSS-SELL"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

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