Python – Itertools.mapa estelar()

itertools es un módulo en Python que tiene una colección de funciones que se utilizan para manejar iteradores. Hacen iterar a través de los iterables como listas y strings muy fácilmente. Una de esas funciones de itertools es starmap() .
Nota: Para obtener más información, consulte Python Itertools
 

función mapa estelar()

Cuando un iterable está contenido dentro de otro iterable y se les debe aplicar cierta función, se usa starmap(). Starmap() considera cada elemento del iterable dentro de otro iterable como un elemento separado. Es similar a mapa(). Esta función pertenece a la categoría de iteradores de terminación .
Sintaxis:
 

starmap(function, iterable)

La función puede ser una función integrada o definida por el usuario o incluso una función lambda. Para comprender la diferencia entre map() y starmap(), observe los fragmentos de código a continuación:
 

Python3

li =[(2, 5), (3, 2), (4, 3)]
 
new_li = list(map(pow, li))
 
print(new_li)
Producción: 

TypeError Traceback (most recent call last)
 in 
      1 li=[(2, 5), (3, 2), (4, 3)]
----> 2 new_li=list(map(pow, li))
      3 print(new_li)

TypeError: pow expected at least 2 arguments, got 1

 

Aquí, el mapa considera cada tupla dentro de la lista como un solo argumento y, por lo tanto, surge el error. El starmap() supera este problema. Mira el fragmento de código a continuación:
 

Python3

from itertools import starmap
 
li =[(2, 5), (3, 2), (4, 3)]
 
new_li = list(starmap(pow, li))
 
print(new_li)
Producción: 

[32, 9, 64]

 

El funcionamiento interno de starmap() se puede implementar como se indica a continuación.
 

def startmap(function, iterable):
  
   for it in iterables:
       yield function(*it)

Aquí ‘it’ también denota un iterable.
Veamos otro ejemplo que diferencia map() y starmap(). Podemos aplicar una función a cada elemento en el iterable usando map(). Para decir que necesitamos agregar un número constante a cada elemento en las listas, podemos usar map(). 
 

Python3

li =[2, 3, 4, 5, 6, 7]
 
# adds 2 to each element in list
ans = list(map(lambda x:x + 2, li))
 
print(ans)
Producción: 

[4, 5, 6, 7, 8, 9]

 

¿Qué sucede si queremos agregar diferentes números a diferentes elementos de la lista?  
Ahora, se debe usar starmap().
 

Python3

from itertools import starmap
 
li =[(2, 3), (3, 1), (4, 6), (5, 3), (6, 5), (7, 2)]
 
ans = list(starmap(lambda x, y:x + y, li))
 
print(ans)
Producción: 

[5, 4, 10, 8, 11, 9]

 

Ejemplo práctico de uso de starmap():
Considere una lista que contiene coordenadas de varios triángulos. Se supone que debemos aplicar el teorema de Pitágoras y encontrar una salida cuyas coordenadas formen un triángulo rectángulo. Se puede implementar como se indica a continuación:
 

Python3

from itertools import starmap
 
 
co_ordinates =[(2, 3, 4),
               (3, 4, 5),
               (6, 8, 10),
               (1, 5, 7),
               (7, 4, 10)]
 
 
# Set true if coordinates form
# a right-triangle else false
right_triangles = list(starmap(lambda x, y, z:True
                               if ((x * x)+(y * y))==(z * z)
                               else False, co_ordinates))
 
print("tuples which form right angled triangle :",
      right_triangles, end ="\n\n")
 
print("The right triangle coordinates are :",
      end ="")
 
# to print the coordinates
for i in range (0, len(right_triangles)):
     
    if right_triangles[i]== True:
         
        print(co_ordinates[i], end =" ")
Salida:
tuplas que forman un triángulo rectángulo: [Falso, Verdadero, Verdadero, Falso, Falso]
Las coordenadas del triángulo rectángulo son: (3, 4, 5) (6, 8, 10)
 

Publicación traducida automáticamente

Artículo escrito por erakshaya485 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 *