Usos de funciones lambdas
Lambdas y la función map()
La función map() toma una función y uno o más iterables como argumentos, aplicando la función a cada elemento del iterable y devolviendo un iterador con los resultados. En combinación con lambdas, map() se vuelve muy poderosa para transformaciones rápidas y expresivas de datos.
Veamos un ejemplo:
list_1 = [x for x in range(5)]
list_2 = list(map(lambda x: 2 ** x, list_1))
print(list_2)
for x in map(lambda x: x * x, list_2):
print(x, end=' ')
print()
- Creamos la lista
list_1que contiene valores generados por la comprensión de listas. - Usamos
map()con la primera lambda:map()toma como función una lambda que eleva 2 a la potencia de cada valor enlist_1. Esta operación se aplica a todos los elementos de la lista, generandolist_2. - Usamos
map()con la segunda lambda:map()toma una lambda que simplemente eleva al cuadrado cada elemento delist_2.
El uso de lambdas en este contexto te permite evitar tener que definir funciones explícitas por separado para elevar al cuadrado o calcular una potencia. Sin las lambdas, el código sería más largo, ya que tendrías que definir funciones como esta:
def elevar_potencia(x):
return 2 ** x
def cuadrado(x):
return x * x
list_1 = [x for x in range(5)]
list_2 = list(map(elevar_potencia, list_1))
print(list_2)
for x in map(cuadrado, list_2):
print(x, end=' ')
print()
Lambdas y la función filter()
La función filter() en Python es muy útil cuando necesitas seleccionar ciertos elementos de una lista o cualquier otro iterable, en base a una condición. Junto con lambdas, puedes escribir código muy conciso y claro para filtrar datos sin la necesidad de escribir funciones explícitas.
La función filter() recibe dos argumentos:
- Una función que devuelve
TrueoFalsepara cada elemento del iterable. - Un iterable (lista, tupla, etc.).
filter() devuelve un iterador que contiene solo los elementos que hacen que la función devuelva True.
Veamos un ejemplo:
from random import seed, randint
seed()
data = [randint(-10,10) for x in range(5)]
filtered = list(filter(lambda x: x > 0 and x % 2 == 0, data))
print(data)
print(filtered)
- Generamos la lista
data: se genera una lista de 5 números enteros aleatorios entre -10 y 10 usando la funciónrandint()del módulorandom. El generador de números aleatorios se inicializa con la funciónseed()para garantizar que los resultados sean aleatorios. - Filtramos la lista: la función
filter()toma una lambda que evalúa si un número es mayor que 0 y es par (x % 2 == 0). Esta lambda se aplica a cada elemento dedata.
Sin lambdas, tendrías que definir una función explícita como esta:
from random import seed, randint
def es_par_y_positivo(x):
return x > 0 and x % 2 == 0
seed()
data = [randint(-10,10) for x in range(5)]
filtered = list(filter(es_par_y_positivo, data))
print(data)
print(filtered)
Aunque este enfoque también funciona, es más largo y, para casos simples, menos legible.