Parte II — El Campamento de los Hechizos 🔥
Funciones Lambda, map/filter, zip y Estructuras Lineales (Pilas y Colas)
🔥 Campamento de Hechizos
En esta etapa, el sabio del campamento enseña herramientas funcionales y estructuras lineales . El foco está en escribir transformaciones claras y expresivas .
🪄 Funciones lambda
al_cuadrado = lambda x: x** 2
print (al_cuadrado(5 ))
# Equivalente con def
def al_cuadrado_def(x): return x** 2
print (al_cuadrado_def(5 ))
Nota: lambda crea funciones anónimas simples; útil como argumento de key, map, filter.
🧹 filter() — seleccionar elementos
numeros = [1 , 2 , 3 , 4 , 5 , 6 ]
pares = list (filter (lambda n: n % 2 == 0 , numeros))
print (pares)
Nota: filter retiene solo los elementos que satisfacen el predicado.
✅ Equivalentes con comprensiones
numeros = [1 ,2 ,3 ,4 ,5 ,6 ]
cuadrados = [n** 2 for n in numeros]
pares = [n for n in numeros if n % 2 == 0 ]
print (cuadrados, pares)
Nota: En Python, las comprensiones son idiomáticas por legibilidad.
🧵 zip() — “cremalleras” de secuencias
nombres = ["Ana" , "Luis" , "Marta" ]
edades = [21 , 22 , 23 ]
parejas = list (zip (nombres, edades))
print (parejas)
Nota: zip agrupa elemento a elemento. Útil para recorrer listas sincronizadas.
📦 Pilas (Stacks) — LIFO
pila = []
pila.append("A" ) # push
pila.append("B" )
pila.append("C" )
tope = pila.pop() # pop => "C"
print (pila, tope)
Nota: Las listas sirven como pilas. Operaciones principales: append y pop.
🚦 Colas (Queues) — FIFO
from collections import deque
cola = deque(["cliente1" , "cliente2" ])
cola.append("cliente3" ) # enqueue
atendido = cola.popleft() # dequeue
print (list (cola), atendido)
Nota: Use collections.deque para colas eficientes en ambos extremos.
🧪 Mini-reto: Undo/Redo
acciones = []
redo = []
def hacer(accion):
acciones.append(accion); redo.clear()
def deshacer():
if acciones: redo.append(acciones.pop())
def rehacer():
if redo: acciones.append(redo.pop())
hacer("escribir A" ); hacer("escribir B" )
deshacer(); rehacer()
print (acciones, redo)
Idea: Dos pilas gestionan historial (undo) y rehacer (redo).
💭 Checkpoint (Reflexión)
¿Cuándo prefieres comprensiones sobre map/filter?
Por claridad y brevedad en transformaciones simples.
¿Qué estructura usar para una cola eficiente?
list • b) deque • c) set
¿Qué retorna zip si las listas tienen longitudes distintas?
Rellena con None • b) Se detiene en la más corta • c) Lanza error