Conjuntos, Diccionarios, Comprensiones, Generadores y Unpacking Avanzado
🏛️ El Templo de los Sabios
Última etapa: estructuras con semántica conjuntista y clave-valor.
Generadores (evaluación perezosa) y operadores de unpacking.
🪶 Conjuntos (Sets)
a = {1, 2, 3, 3}b = {3, 4, 5}print(a) # {1, 2, 3}print(a | b) # uniónprint(a & b) # intersecciónprint(a - b) # diferencia
Nota: Un set no almacena duplicados y no preserva orden.
🧰 Diccionarios (Dict)
precios = {"manzana": 1200, "pera": 900}precios["uva"] =1500# agregarprecios["pera"] =950# actualizardel precios["manzana"] # eliminarprint(precios.get("mango", 0)) # acceso seguro con valor por defectoprint(list(precios.items())) # pares (clave, valor)
Nota: Mapeos clave→valor con acceso promedio O(1).
✨ Dict & Set Comprehensions
numeros = [1,2,3,4,5]dobles = {n: n*2for n in numeros if n %2==1} # dict comprehensionpares = {n for n in numeros if n %2==0} # set comprehensionprint(dobles, pares)
Nota: Compacidad y legibilidad para generar colecciones derivadas.
🔄 Generadores (evaluación perezosa)
def cuadrados(n):for i inrange(n):yield i**2g = cuadrados(5) # no calcula aúnprint(next(g), next(g)) # evalúa bajo demanda
Nota:yield suspende la función y produce valores secuenciales bajo demanda, ahorrando memoria frente a listas grandes.
💡 Expresión generadora
import sysgen = (i**2for i inrange(10_000))print(type(gen).__name__, sys.getsizeof(gen))
Nota: Una generator expression es como una comprensión, pero perezosa.