Conjuntos, Diccionarios, Comprensiones, Generadores y Unpacking Avanzado
Última etapa: estructuras con semántica conjuntista y clave-valor.
Generadores (evaluación perezosa) y operadores de unpacking.
a = {1, 2, 3, 3}
b = {3, 4, 5}
print(a) # {1, 2, 3}
print(a | b) # unión
print(a & b) # intersección
print(a - b) # diferenciaNota: Un set no almacena duplicados y no preserva orden.
precios = {"manzana": 1200, "pera": 900}
precios["uva"] = 1500 # agregar
precios["pera"] = 950 # actualizar
del precios["manzana"] # eliminar
print(precios.get("mango", 0)) # acceso seguro con valor por defecto
print(list(precios.items())) # pares (clave, valor)Nota: Mapeos clave→valor con acceso promedio O(1).
numeros = [1,2,3,4,5]
dobles = {n: n*2 for n in numeros if n % 2 == 1} # dict comprehension
pares = {n for n in numeros if n % 2 == 0} # set comprehension
print(dobles, pares)Nota: Compacidad y legibilidad para generar colecciones derivadas.
def cuadrados(n):
for i in range(n):
yield i**2
g = cuadrados(5) # no calcula aún
print(next(g), next(g)) # evalúa bajo demandaNota: yield suspende la función y produce valores secuenciales bajo demanda, ahorrando memoria frente a listas grandes.
Nota: Una generator expression es como una comprensión, pero perezosa.
# Unir secuencias
a = [1, 2]; b = [3, 4]
c = [*a, *b, 5] # [1,2,3,4,5]
# Unir diccionarios (Python 3.9+)
d1 = {"x": 1}; d2 = {"y": 2}
d = {**d1, **d2, "z": 3}
print(c, d)Nota: * desempaqueta iterables; ** desempaqueta mapeos (diccionarios).
Nota: En Python no se necesita variable temporal auxiliar.
{"a":1} | {"b":2} en Python 3.9+?{"a":1, "b":2} • b) Error • c) {"a":1} | {"b":2} (cadena)* • b) ** • c) //