Funciones Lambda, map/filter, zip y Estructuras Lineales (Pilas y Colas)
En esta etapa, el sabio del campamento enseña herramientas funcionales y estructuras lineales. El foco está en escribir transformaciones claras y expresivas.
lambdaal_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.
map() — transformar coleccionesNota: map aplica una función a cada elemento. En Python moderno, muchas veces preferimos comprensiones.
filter() — seleccionar elementosNota: filter retiene solo los elementos que satisfacen el predicado.
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 secuenciasnombres = ["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.
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.
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.
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).
map/filter?list • b) deque • c) setzip si las listas tienen longitudes distintas?None • b) Se detiene en la más corta • c) Lanza error