Die itertools sind ein Modul in Python mit einer Sammlung von Funktionen, die zur Behandlung von Iteratoren verwendet werden. Sie machen das Durchlaufen der iterablen Elemente wie Listen und Zeichenfolgen sehr einfach. Eine solche itertools-Funktion ist starmap() .

Hinweis: Weitere Informationen finden Sie unter Python Itertools

starmap() Funktion

Wenn eine iterable in einer anderen iterable enthalten ist und bestimmte Funktionen auf sie angewendet werden müssen, starmap()wird verwendet. Das starmap()betrachtet jedes Element der Iterable innerhalb einer anderen Iterable als separates Element. Es ist ähnlich wie map(). Diese Funktion fällt unter die Kategorie, die Iteratoren beendet .

Syntax :

Sternenkarte (Funktion, iterierbar)

Die Funktion kann eine integrierte oder benutzerdefinierte oder sogar eine Lambda-Funktion sein. Um den Unterschied zwischen map() und starmap() zu verstehen, sehen Sie sich die folgenden Codefragmente an:



li =[(2, 5), (3, 2), (4, 3)] 
  
new_li = list(map(pow, li)) 
  
print(new_li) 
Ausgabe:
TypeError Traceback (letzter Aufruf zuletzt)
 im
      1 li = [(2, 5), (3, 2), (4, 3)]
----> 2 new_li = list (map (pow, li))
      3 print (new_li)
TypeError: pow erwartet mindestens 2 Argumente, hat 1

Hier betrachtet die Karte jedes Tupel in der Liste als ein einzelnes Argument und somit wird der Fehler ausgelöst. Die starmap() überwindet dieses Problem. Schauen Sie sich das folgende Code-Snippet an:

from itertools import starmap 
  
li =[(2, 5), (3, 2), (4, 3)] 
  
new_li = list(starmap(pow, li)) 
  
print(new_li) 
Ausgabe:
[32, 9, 64]

Die interne Arbeitsweise der starmap() kann wie unten angegeben implementiert werden.

def startmap (Funktion, iterierbar):
   dafür in iterables:
       yeild function (* it)

Hier bezeichnet 'es' auch eine iterable.

Schauen wir uns ein anderes Beispiel an, das map() und starmap() unterscheidet. Wir können mit map() auf jedes Element in der Iterable eine Funktion anwenden. Um zu sagen, dass wir jedem Element in den Listen eine konstante Zahl hinzufügen müssen, können wir map() verwenden.

li =[2, 3, 4, 5, 6, 7] 
  
ans = list(map(lambda x:x + 2, li)) 
  
print(ans) 
Ausgabe:
[4, 5, 6, 7, 8, 9]

Was ist, wenn wir verschiedenen Elementen der Liste unterschiedliche Nummern hinzufügen möchten?



Jetzt muss starmap() verwendet werden.

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) 
Ausgabe:
[5, 4, 10, 8, 11, 9]

Praktisches Beispiel für die Verwendung von starmap():

Betrachten Sie eine Liste mit Koordinaten verschiedener Dreiecke. Wir sollen den Satz von Pythagoras anwenden und herausfinden, welche Koordinaten ein rechtwinkliges Dreieck bilden. Es kann wie folgt implementiert werden:

from itertools import starmap 
  
  
co_ordinates =[(2, 3, 4),  
               (3, 4, 5), 
               (6, 8, 10), 
               (1, 5, 7), 
               (7, 4, 10)] 
  
  
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 ="") 
  
for i in range (0, len(right_triangles)): 
      
    if right_triangles[i]== True: 
          
        print(co_ordinates[i], end =" ") 
Ausgabe:

Tupel, die ein rechtwinkliges Dreieck bilden: [Falsch, Richtig, Richtig, Falsch, Falsch]

Die rechtwinkligen Dreieckskoordinaten sind: (3, 4, 5) (6, 8, 10)