Saltar al contenido principal
eLearner.app
Módulo 3 · Lección 4 de 412/36 en el curso~10 min
Lecciones del módulo (4/4)

Conjuntos

Un conjunto (set) es una colección de elementos únicos y no ordenados. Tres superpoderes:

  1. Deduplicación automática: añadir el mismo elemento dos veces no tiene efecto.
  2. Prueba de pertenencia O(1): x in s es extremadamente rápido incluso con millones de elementos (está basado en hash, como los diccionarios).
  3. Operaciones de conjuntos: unión, intersección, diferencia, diferencia simétrica.

Crear un conjunto

Python
vuoto = set()           # ATENCIÓN: {} es un diccionario vacío, ¡no un conjunto!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

Las llaves solas {} crean un diccionario vacío, no un conjunto: para un conjunto vacío necesitas set().

Modificar un conjunto

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # sin efecto (ya presente)
s.discard(99)    # elimina si está presente, silencioso de lo contrario
s.remove(2)      # elimina o lanza KeyError

Operaciones de conjuntos

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     unión
a & b    # {3, 4}                  intersección
a - b    # {1, 2}                  diferencia (en a pero no en b)
a ^ b    # {1, 2, 5, 6}            diferencia simétrica (xor)

También existen formas metodológicas (a.union(b), a.intersection(b), …) que además aceptan cualquier iterable, no solo conjuntos.

Prueba de pertenencia

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

En comparación: buscar con in dentro de una list es O(n) y en listas largas es muchísimo más lento.

Frozen set: la versión inmutable

frozenset({1, 2, 3}) es la versión hashable: puede ser una clave de diccionario o un elemento de otro conjunto.

Operaciones de conjuntos y rendimiento

Los conjuntos se implementan como tablas hash, lo que hace que las pruebas de pertenencia (x in mi_conjunto) sean extremadamente rápidas: se ejecutan en tiempo constante O(1), a diferencia de las listas, donde la búsqueda requiere tiempo lineal O(n). Además, admiten operaciones algebraicas como la unión (|), la intersección (&) y la diferencia (-).

Pruébalo tú

Ejercicio#python.m3.l4.e1
Intentos: 0Cargando...

Dada la lista `nums = [1, 2, 2, 3, 3, 3, 4]`, construye `unique_items` con los valores únicos (en cualquier orden) y luego calcula `count` como len(unique_items). Evalúa `count`.

Cargando editor...
Mostrar pista

set(nums) elimina los duplicados.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m3.l4.e2
Intentos: 0Cargando...

Dados `a = {1, 2, 3, 4}` y `b = {3, 4, 5, 6}`, calcula la intersección en `common_items` y la diferencia a-b en `only_a`. Evalúa la tupla `(common_items, only_a)`.

Cargando editor...
Mostrar pista

& intersección, - diferencia.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m3.l4.e3
Intentos: 0Cargando...

Dados dos conjuntos `set_a = {1, 2, 3}` y `set_b = {2, 3, 4}`, calcula la intersección matemática de los dos conjuntos (sus elementos comunes). Guarda el conjunto resultante en `common_elements` y evalúalo.

Cargando editor...
Mostrar pista

Puedes usar el operador & o el método set_a.intersection(set_b).

Solución disponible después de 3 intentos