Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

Funci贸n map()

Esta funci贸n trabaja de una forma muy similar a filter(), con la diferencia que en lugar de aplicar una condici贸n a un elemento de una lista o secuencia, aplica una funci贸n sobre todos los elementos y como resultado se devuelve un iterable de tipo map:

Note

def doblar(numero):
    return numero*2

numeros = [2, 5, 10, 23, 50, 33]

map(doblar, numeros)
<map at 0x212eb6e0748>

F谩cilmente podemos transformar este iterable en una lista:

Note

list(map(doblar, numeros))
[4, 10, 20, 46, 100, 66]

Y podemos simplificarlo con una funci贸n lambda para substituir la llamada de una funci贸n definida:

Note

list( map(lambda x: x*2, numeros) )
[4, 10, 20, 46, 100, 66]

La funci贸n map() se utiliza mucho junto a expresiones lambda ya que permite ahorrarnos el esfuerzo de crear bucles for.

Adem谩s se puede utilizar sobre m谩s de un iterable con la condici贸n que tengan la misma longitud.

Por ejemplo si queremos multiplicar los n煤meros de dos listas:

Note

a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]

list( map(lambda x,y : x*y, a,b) )
[7, 9, 11, 13, 15]

E incluso podemos extender la funcionalidad a tres listas o m谩s:

Note

c = [11, 12, 13, 14, 15]

list( map(lambda x,y,z : x*y*z, a,b,c) )
[66, 168, 312, 504, 750]

Mapeando objetos

Evidentemente, siempre que la utilicemos correctamente podemos mapear una serie de objetos sin ning煤n problema:

Note

def incrementar(p):
    p.edad += 1
    return p

personas = map(incrementar, personas)

for persona in personas:
    print(persona)
Juan de 36 a帽os
Marta de 17 a帽os
Manuel de 79 a帽os
Eduardo de 13 a帽os

Claro que en este caso tenemos que utilizar una funci贸n definida porque no necesitamos actuar sobre la instancia, a no ser que nos tomemos la molestia de rehacer todo el objeto:

Note

personas = [
    Persona("Juan", 35),
    Persona("Marta", 16),
    Persona("Manuel", 78),
    Persona("Eduardo", 12)
]

personas = map(lambda p: Persona(p.nombre, p.edad+1), personas)

for persona in personas:
    print(persona)
Juan de 36 a帽os
Marta de 17 a帽os
Manuel de 79 a帽os
Eduardo de 13 a帽os

脷ltima edici贸n: 6 de Octubre de 2018