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)
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)
[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)
[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)
[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 =" ")
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