Convierta un bucle for anidado en un mapa equivalente en Python

En este artículo, veamos cómo convertir un bucle for anidado en un mapa equivalente en python.

El equivalente del mapa de un bucle for anidado hace el mismo trabajo que el bucle for pero en una sola línea. Un mapa equivalente es más eficiente que el de un bucle for anidado. Un bucle for se puede detener de forma intermitente, pero la función de mapa no se puede detener en el medio. 

Sintaxis:

mapa (función, iterable). 

Esto se puede elaborar como 

map(lambda x : expresión, iterable)

La función Map simplemente aplica la función especificada en el iterable dado y devuelve el iterable modificado como resultado.

Ejemplo: creación de un bucle anidado

Python3

# create two sample lists lst1 and lst2 as shown
lst1 = [10, 20, 30]
lst2 = [3, 4, 5]
 
# this empty list stores the output
result = []
 
# Now, run a nested for loop
# add every element of the lst1 to all elements of lst2
# store the output in a separate list
for i in lst1:
    for j in lst2:
        result.append(i+j)
 
# print the result
print(result)

Producción:

[13, 14, 15, 23, 24, 25, 33, 34, 35]

Ahora, veamos el mapa equivalente de este bucle for anidado.

Para ello se utilizan tres funciones de mapa, dos anidadas en la otra. La primera función de mapa es la función de mapa principal que une los resultados de las dos funciones de mapa internas. Tenemos que pasar el resultado completo a la función list(). Si elegimos ignorar, la función list() más externa, la salida será un objeto de mapa. La razón es que al objeto del mapa no le gusta almacenar el tamaño completo del iterable en su memoria. Entonces, para acceder a la salida, necesitaríamos especificar explícitamente el formato de salida de esta función de mapa para que sea una lista.

Ejemplo: convertir un bucle for anidado en un mapa equivalente

Python3

# create two sample lists lst1 and lst2 as shown
lst1 = [10, 20, 30]
lst2 = [3, 4, 5]
 
# this empty list stores the output
result = []
 
# now, apply nested map function on both the
# created lists append the final output to
# the "result" list
list(map(lambda a: result.extend(map(a, lst2)),
         map(lambda a: lambda b: a+b, lst1)))
 
print(result)

Producción:

[13, 14, 15, 23, 24, 25, 33, 34, 35]

Si compara el resultado del bucle for anidado y su equivalente en el mapa, ambos serán iguales. Sin embargo, en complejidad de tiempo, el equivalente del mapa supera al bucle for anidado.

Publicación traducida automáticamente

Artículo escrito por jssuriyakumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *