4. Map, Filter y Reduce¶
Estas tres funciones proporcionan un enfoque funcional a la programación. Si no sabes que es la programación funcional, te recomendamos que leas acerca de ello, ya que es un mundo muy interesante. A continuación explicamos map
, reduce
y filter
con varios ejemplos.
4.1. Map¶
El uso de map
aplica una determinada función a todos los elementos de una entrada o lista. Esta es su forma:
Forma
map(funcion_a_aplicar, lista_de_entradas)
Se trata de un caso de uso bastante recurrente. Imaginemos por ejemplo que tenemos una lista y queremos crear otra lista con todos sus elementos elevados al cuadrado. La primera forma que tal vez se nos ocurra, sería la siguiente:
lista = [1, 2, 3, 4, 5]
al_cuadrado = []
for i in lista:
al_cuadrado.append(i**2)
Sin embargo, existe una forma más fácil de hacerlo con map
. Es mucho más sencilla y corta:
lista = [1, 2, 3, 4, 5]
al_cuadrado = list(map(lambda x: x**2, lista))
La mayoría de las veces map
es usado conjuntamente con funciones lambda. Si no sabes lo que son, las explicamos en otro capítulo.
Otra forma de usar map
es teniendo una lista de funciones en vez de una en concreto. Veamos un ejemplo:
def multiplicar(x):
return (x*x)
def sumar(x):
return (x+x)
funcs = [multiplicar, sumar]
for i in range(5):
valor = list(map(lambda x: x(i), funcs))
print(valor)
# Salida:
# [0, 0]
# [1, 2]
# [4, 4]
# [9, 6]
# [16, 8]
Se puede ver como ahora para cada elemento (del 0 al 4) tenemos dos salida, la primera aplica la función multiplicar
y la segunda sumar
.
4.2. Filter¶
Como su nombre indica, filter
crea una lista de elementos si usados en la llamada a una función devuelven True
. Es decir, filtra los elementos de una lista usando un determinado criterio. Veamos un ejemplo:
lista = range(-5, 5)
menor_cero = list(filter(lambda x: x < 0, lista))
print(menor_cero)
# Salida: [-5, -4, -3, -2, -1]
La función filter
es similar a un bucle, y de hecho podríamos conseguir lo mismo con un bucle y un if
, pero su uso es más rápido.
Nota: Si no te gusta el uso de map y filter, echa un vistazo a las list comprehensions de las que hablamos en otro capítulo.
4.3. Reduce¶
Por último, reduce
es muy útil cuando queremos realizar ciertas operaciones sobre una lista y devolver su resultado. Por ejemplo, si queremos calcular el producto de todos los elementos de una lista, y devolver un único valor, podríamos hacerlo de la siguiente forma sin usar reduce
.
producto = 1
lista = [1, 2, 3, 4]
for num in lista:
producto = producto * num
# producto = 24
Ahora vamos a hacerlo con reduce
.
from functools import reduce
producto = reduce((lambda x, y: x * y), [1, 2, 3, 4])
# Salida: 24