Tutorial 11, Map, filter y reduce.

Hola a tod@s, esta mañana es que tengo bastante tiempo libre y voy a adelantar trabajo, siempre que tengo un rato escribo en el blog.

En este post voy a hablaros sobre unas funciones especiales, que son map filter y reduce, vamos a verlas detenidamente:


Map:

Map aplica cada elemento de un objeto iterable a una función devolviendo una lista de lo que devuelve la función que usamos, ya comenté que todos los objetos iterables son las listas, tuplas, diccionarios, generadores (ya lo explicaré), incluso cadenas de texto, ejemplo:

def mul(n):
       return n*2

lista=[1, 2, 3, 4, 5]
resultado=map(mul, lista)

A map se le pasa como primer argumento la función que se va a usar y como segundo argumento el objeto iterable, devolviendo una lista, en este ejemplo resultado sería igual a:

[2, 4, 6, 8, 10]

Así de fácil, le pasamos a map una función y un objeto iterable, y va probando la esa función con cada valor de la lista "apuntando" cada resultado en otra lista resultante.

 Filter:

Como su nombre indica, es un filtro, solo devuelve los valores que cumplan una determinada condición, lo mejor para esto es ver un ejemplo:
Def par(n):
       return (n%2==0)

lista=[1, 2, 3, 4, 5, 6, 7, 8, 9]
resultado=filter(par, lista)

En este ejemplo devolvería una lista llamada resultado, en la cual sólo apuntará los elementos de lista que cumplan la condición especificada en el return de la función, en este caso es que el número sea par, el resultado sería:

[2, 4, 6, 8]

Esta función en realidad es como map, la única diferencia es que en vez de devolver todos los valores como lo hace map, tan sólo devuelve los que cumplan alguna condición (ya sabéis que esta condición se especifica en el return).

Reduce:

Esta función ya es un poco mas complicada de entender, "reduce" como su nombre indica reduce a través de una función de dos argumentos (esto es importante) los valores de un objeto iterable:

def mul(a, b):
        return a * b

lista=[1, 2, 3, 4, 5, 6, 7, 8, 9]
valor=reduce(mul, lista)
#valor sería igual a 362880.

Lo que hace es pasarle a la función mul el primer elemento de la lista como primer argumento y el segundo elemento al segundo argumento, en este caso genera 2, "1*2=2", después ese resultado que ha dado se lo pasa a la función como primer argumento y toma el siguiente elemento de la lista como segundo argumento, "2*3=6", y así todo el rato hasta que la función se reduce a un solo valor.

Pd: Es importante que la función que le pasemos a reduce tenga dos argumentos, ni uno ni tres, en caso de no ser dos argumentos nos tirará una excepción.

Estas funciones que he explicado en este post perderán valor en python 3.x ya que se aconseja usar mejor la comprensión de listas que las explicaré en el siguiente post, no desaparecerán estas funciones pero por ejemplo reduce pasara a ser un método del módulo functools, por lo cual no estará por defecto.

Bueno chic@s, espero  que os haya gustado este post, un abrazo a todos y hasta el siguiente tutorial, un abrazo.

2 comentarios:

Dr Coloso dijo...

Muy Bueno aca hice unos ejemplos.

http://pastebin.com/BCXby79S

Francisco Dominguez Lerma dijo...

Muy buen ejemplo Dr coloso, gracias por comentar y sigue con el tutorial 12 ;)

Un saludo.