Función Python map(), explicada con ejemplos

En este tutorial, aprenderá a usar la función map() de Python para aplicar una función en todos los elementos de un iterable.

Python es compatible con el paradigma de programación funcional que le permite definir tareas como el cálculo de funciones mediante programación. Puede tratar las funciones de Python como objetos: una función puede tomar otra función como parámetro y devolver otra función.

La función map() toma una función como argumento y le permite aplicarla a todos los elementos en una secuencia.

Al final de este tutorial, podrá usar la función map() de Python para reescribir bucles detallados y listas de comprensión. Codificará varios ejemplos para comprender las diferentes formas en que puede usar la función map().

Cómo aplicar una función a los elementos de una lista de Python

Comencemos nuestra discusión con un ejemplo.👩‍🏫

Aquí nums es una lista de números.

nums = [2,4,3,7]

A continuación, considere la función self_pow(). La función self_pow() toma un número como argumento y devuelve el número elevado a la potencia del propio número: n**n.

En Python, ** es el operador de exponenciación. a**b devuelve el valor de a elevado a la potencia b, ab.

def self_pow(n):
  return n**n

TO-DO: Para crear una nueva lista nums_pow aplicando la función self_pow() a cada elemento en la lista nums.

Uso de bucle for

Para hacer esto, puede usar bucles for en Python:

  • Para cada número en la lista nums, llama a la función self_pow() con num como argumento.
  • Agregue el resultado de la llamada de función a la nueva lista nums_pow.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

En la salida, cada número nums se eleva a sí mismo. Los elementos de la lista nums_pow son los siguientes: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Uso de la comprensión de listas

Puede hacer esto conciso usando la comprensión de listas. Desde el bucle for explícito anterior, podemos identificar la expresión de salida y la lista para recorrer.

Entonces podemos modificar la expresión de comprensión de lista genérica:

new_list = [<output expression> for item in iterable]

La expresión de comprensión de lista para generar la lista nums_pow es la siguiente:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

El resultado es el mismo que el del uso de bucles for, como se esperaba.

Output
[4, 256, 27, 823543]

En lugar de la comprensión de bucles y listas, puede usar la función Python map() con una sintaxis concisa y ayuda a aplicar la función a todos los elementos en un iterable. Empecemos aprendiendo la sintaxis de la función map.

Sintaxis de la función Python map()

La sintaxis general para usar la función map() de Python es la siguiente:

map(function, iterable_1,[iterable_2,...,iterable_n])

La función map() toma al menos dos argumentos, una función y un iterable.

En la sintaxis anterior:

  • función denota una función de Python o, en general, cualquier Python invocable. Esto incluye funciones integradas y definidas por el usuario, clases, métodos de instancia y clase, y más.
  • iterable es cualquier iterable de Python válido, como una lista, una tupla y una cadena.
  • Se aplica la función map(), y la función se usa para cada elemento en el iterable.

¿Qué devuelve la función map()?

Devuelve un objeto de mapa. Luego puede convertir el objeto de mapa en una lista usando la sintaxis: list(map(function,iterable)).

Según el caso de uso, puede convertirlo en una tupla de Python.

Ahora que ha aprendido la sintaxis de la función map() de Python, comencemos a codificar ejemplos.

Debe tener Python 3.x para seguir este tutorial. De lo contrario, puede ejecutar los fragmentos de código en el editor de Python en línea kirukiru.es.

Cómo utilizar la función map() con funciones definidas por el usuario

#1. Previamente, habíamos aplicado la función self_pow() a cada número en la lista de números. En la sintaxis de la función map(), podemos pasar la función self_pow y la lista nums como argumentos.

Nota: solo debe especificar el nombre de la función y no una llamada de función. Utilice self_pow y no self_pow().

La función map() devuelve un objeto de mapa.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Luego podemos convertir el objeto del mapa en una lista usando la función list(), como se muestra a continuación.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Aquí está la salida donde cada num en nums se asigna a numnum en la lista nums_pow.

Output
[4, 256, 27, 823543]

#2. Considere la siguiente función inch_to_cm() que convierte pulgadas a centímetros. 1 pulgada = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Para convertir los valores de pulgadas en la lista de pulgadas a centímetros, puede usar la función map() como se muestra en la celda de código a continuación.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

La lista cms contiene los valores en pulgadas expresados ​​en centímetros.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Cómo usar la función map() con funciones integradas

En esta sección, aprenderemos a usar map() con funciones integradas en Python.

#1. La lista de cadenas es una lista de lenguajes de programación. Le gustaría crear una nueva lista strings_upper que contenga las cadenas del lenguaje de programación en mayúsculas.

strings = ['JavaScript','Rust','Python','Go']

El método de cadena integrado .upper() actúa sobre una cadena y devuelve una copia formateada en mayúsculas.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

La lista strings_upper incluye cadenas en la lista cadenas formateadas en mayúsculas.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. La función len() incorporada en Python toma una secuencia como argumento y devuelve su longitud. Para encontrar la longitud de cada una de las cadenas en la lista de cadenas, podemos usar la función map() y aplicar la función de longitud en cada cadena, como se muestra a continuación.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Puede usar la función map() con otras colecciones, como tuplas.

El siguiente ejemplo contiene una tupla que contiene información sobre el número de habitaciones, el área y la ciudad en la que se encuentra una casa.

En Python, la función type() devuelve el tipo de datos de cualquier objeto de Python. Para obtener el tipo de datos de todos los elementos de esta tupla, puede usar la función map() para llamar a la función de tipo en cada elemento de la tupla.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Hemos convertido el objeto del mapa en una tupla. También puede convertir en una lista o cualquier otra colección.

En el siguiente resultado, vemos que los tipos de datos de 2, 758.5 ​​y Bangalore se dedujeron como ‘int’, ‘float’ y ‘str’, respectivamente.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. En Python, puede importar módulos integrados y usar las funciones definidas en los módulos.

Para calcular la raíz cuadrada de cada número en la lista de números, puede usar la función de raíz cuadrada sqrt del módulo matemático.

import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

El resultado anterior es difícil de analizar y seguir. Es posible que desee redondear cada valor de raíz cuadrada para decir, dos lugares decimales.

Cómo redondear un número de punto flotante en Python

Definamos una función round_2() que tome un valor de coma flotante y lo redondee a dos lugares decimales.

def round_2(num):
  return round(num,2)

Ahora, puede usar la función map() con la lista round_2 y nums_sqrt.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

También puede usar funciones map() anidadas, donde la función de mapa interno se usa para calcular la lista de raíz cuadrada nums_sqrt, y la función de mapa externo realiza la operación de redondeo.

nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Los resultados son idénticos en los dos enfoques anteriores. Sin embargo, debe asegurarse de que el código sea legible y mantenible al anidar funciones como se muestra arriba.

Cómo usar la función map() con funciones Lambda

En las secciones anteriores, aprendió a usar la función map() de Python con funciones integradas y definidas por el usuario. Ahora aprenderá a usar la función map() con funciones lambda, que son anónimas en Python.

A veces, tendrá una función cuyo cuerpo contiene solo una línea de código, y es posible que necesite usar la función solo una vez y no hacer referencia a ella en ninguna otra parte del programa. Puede definir tales funciones como una función lambda en Python.

Nota: lambda args: expresión es la sintaxis general para usar una función lambda de Python.

#1. Considere las siguientes cadenas de lista. Suponga que desea obtener una lista strings_rev, que contiene una copia invertida de cada una de las cadenas.

strings = ['JavaScript','Rust','Python','Go']

Podemos revertir una cadena de Python usando el corte de cadenas.

Nota: Esta es una generalización de la expresión de corte de cadenas str[start:stop:step].

– Sin los valores de inicio y fin, el segmento comienza al principio de la cadena y se extiende hasta el final de la cadena.
– Los valores negativos de paso dan porciones comenzando desde el final de la cadena.
– Por lo tanto, calle[::-1] devuelve una copia invertida de str.

Puede usar esta función lambda: lambda x:x[::-1]Dentro de la función de mapa, como se muestra a continuación.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Al igual que con otros ejemplos, convertimos el objeto de mapa en una lista. En el resultado, vemos que cada una de las cadenas de la lista de cadenas se ha invertido.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. En la sección anterior, calculamos la raíz cuadrada de cada número en la lista de números y luego redondeamos cada valor de raíz cuadrada a dos lugares decimales.

Usamos la función round_2() para hacer esto. Reescribamos la función round_2() como una función lambda y usémosla con la función map() que se describe a continuación.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Como se ve a continuación, el resultado es idéntico al que obtuvimos al usar la función round_2().

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Cómo usar la función map () con múltiples iterables

En los ejemplos que hemos visto, aplicamos una función en todos los elementos de exactamente un iterable.

A veces, podemos tener funciones que toman dos o más argumentos. En este caso, cada argumento se almacena en una lista o cualquier colección similar.

También podemos usar la función map() de Python con varias listas.

#1. Considere la siguiente función area() que acepta la longitud y la anchura como entradas y devuelve el área, longitud*anchura.

def area(length,breadth):
  return length*breadth

La longitud y el ancho de diferentes rectángulos se almacenan en dos listas separadas, longitudes y anchos, respectivamente.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Podemos usar la función map() para aplicar la función de área en las listas anteriores al pasar las listas de longitudes y anchuras.

areas = list(map(area,lengths,breadths))
print(areas)

Debido a que el área de la función acepta dos argumentos, los valores de longitud y anchura se utilizan de las listas de longitudes y anchuras, respectivamente.

Output
[36, 32, 60, 198]

#2. El módulo matemático de Python tiene la función de registro que nos ayuda a calcular el logaritmo de un número en cualquier base.

Nota: log(x, base) devuelve el valor de log x a la base especificada por el valor base, log base x. Si no se especifica la base, el valor base predeterminado es e (log calcula el logaritmo natural).

En este ejemplo:

  • La lista x corresponde a los valores para los que desea calcular el logaritmo.
  • La lista base contiene todos los valores base que se utilizarán en el cálculo del logaritmo.
x = [2,6,12,10]
base = [2,3,2,5]

Podemos usar la función map() de Python con math.log, las listas, x y base para obtener la nueva lista log_x, de la siguiente manera.

log_x = list(map(math.log,x,base))
print(log_x)

Aquí está la salida.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Conclusión

Aquí hay un resumen de lo que has aprendido en este tutorial:

  • La función map() de Python toma al menos dos argumentos: una función y un iterable, con la sintaxis map(function, iterable(s)).
  • La función puede ser cualquier Python válido al que se pueda llamar.
  • Cuando la función toma k argumentos, use la función map() con la función y cada uno de los k argumentos en un iterable.

A continuación, aprenda a trabajar con conjuntos en Python.