Python tiene funciones integradas que te permiten transformar y filtrar colecciones de datos de forma elegante: map() y filter(). Funcionan pasándoles otra función como argumento — por eso se llaman funciones de alto nivel.
¿Qué es una función de alto nivel?
Una función de alto nivel es aquella que recibe otra función como argumento. Esto puede sonar extraño al principio, pero es muy poderoso: le estás diciendo a map o filter "qué hacer con cada elemento".
filter(): seleccionar elementos
filter(funcion, iterable) devuelve solo los elementos para los que la función devuelve True.
numeros = [1, 8, 3, 12, 5, 20, 7]
mayores_que_5 = list(filter(lambda n: n > 5, numeros))
print(mayores_que_5) # [8, 12, 20]
lambda es una función anónima de una sola línea — perfecta para casos simples.
map(): transformar elementos
map(funcion, iterable) aplica la función a cada elemento y devuelve los resultados.
precios = [1000, 2500, 800, 5000]
con_iva = list(map(lambda p: p * 1.19, precios))
print(con_iva) # [1190.0, 2975.0, 952.0, 5950.0]
Nota: tanto filter como map devuelven un objeto especial — necesitas list() para convertirlo a lista.
Ejemplo 1: filtrar empleados activos
empleados = [
{"nombre": "Ana", "activo": True},
{"nombre": "Carlos", "activo": False},
{"nombre": "María", "activo": True},
]
activos = list(filter(lambda e: e["activo"], empleados))
for emp in activos:
print(emp["nombre"])
# Ana
# María
Ejemplo 2: transformar con función nombrada
Puedes pasar cualquier función, no solo lambdas:
def celsius_a_fahrenheit(c):
return c * 9/5 + 32
temperaturas_c = [0, 20, 37, 100]
temperaturas_f = list(map(celsius_a_fahrenheit, temperaturas_c))
print(temperaturas_f) # [32.0, 68.0, 98.6, 212.0]
Ejemplo 3: combinar filter y map
Primero filtra los precios mayores a 1000, luego aplica descuento del 20%:
precios = [500, 1500, 800, 3000, 200, 2500]
resultado = list(map(
lambda p: p * 0.8,
filter(lambda p: p > 1000, precios)
))
print(resultado) # [1200.0, 2400.0, 2000.0]
filter/map vs comprensión de listas
En Python moderno, la comprensión de listas suele preferirse por su legibilidad:
# Con filter + map
resultado = list(map(lambda p: p * 0.8, filter(lambda p: p > 1000, precios)))
# Con comprensión (más legible)
resultado = [p * 0.8 for p in precios if p > 1000]
Ambas son correctas. La comprensión es más "pythónica".
Errores frecuentes
Olvidar el list(): filter() y map() devuelven iteradores, no listas. Si intentas imprimirlos directamente obtienes algo como <filter object at 0x...>.
Lambda demasiado compleja: Si la función tiene más de una línea de lógica, define una función nombrada con def. Las lambdas son para casos simples.
Aprende haciendo, no solo leyendo
Leer es el primer paso. El verdadero aprendizaje ocurre cuando practicas con ejercicios reales de Python y recibes corrección inmediata de IA.
Comenzar gratis →