Python Itertools-Funktionen, die Iteratoren für effiziente Schleifen erzeugen.
Python Itertools:
Dieses Modul standardisiert einen Kernsatz von schnellen, speichereffizienten Werkzeugen, die allein oder in Kombination nützlich sind. Zusammen bilden sie ein "iterator algebra”
Modul, das es ermöglicht, spezialisierte Werkzeuge prägnant und effizient in reinem Python zu konstruieren.
Das Modul Python Itertools ist in der Python Standard Library verfügbar.
Typen von Iteratoren, die von diesem Modul bereitgestellt werden:
- Unendliche Iteratoren
- Iteratoren, die auf der kürzesten Eingabesequenz enden
- Kombinatorische Iteratoren
Rückgabetyp ist ein Iterator-Objekt.Wir können durch den Iterator iterieren, indem wir
- die Funktion next() verwenden
- eine for-Schleife verwenden
- mit list()
Unendliche Iteratoren:
count(),cycle(),repeat()
- count():
Erzeugt einen Iterator, der in gleichmäßigen Abständen Werte zurückgibt, beginnend mit der im Argument start angegebenen Zahl.Standardmäßig ist start gleich 0 und step gleich 1.Diese Funktion gibt einen unendlichen Iterator zurück.
itertools.count(start=0,step=1)
Sie wird auch als Argument in den Funktionen map() und zip() verwendet.
zip()
-zip()-Funktion ist eine in Python eingebaute Funktion, die es erlaubt, entsprechende Elemente aus mehreren Sequenzen zu kombinieren und ein zip-Objekt zurückzugeben, das ein Iterator von Tupeln ist. itertools.count()
kann als Sequenz in der zip()-Funktion verwendet werden.
map()
Die Python-Funktion map() wird verwendet, um die Funktion auf alle Elemente in der angegebenen Iterable anzuwenden und gibt ein map-Objekt zurück, das ein Iterator ist. Wir können itertools.count() als Argument in der map()-Funktion verwenden.
2. cycle():
Erzeugt einen Iterator, der Elemente aus der Iterable zurückgibt und von jedem eine Kopie speichert.Wenn die Iterable erschöpft ist, wird ein Element aus der gespeicherten Kopie zurückgegeben.
itertools.cycle(iterable)
3.repeat():
Erzeugt einen Iterator, der immer wieder ein Objekt zurückliefert.
Läuft unendlich lange, wenn kein Zeitargument angegeben wird.
Wird als Argument in den Funktionen map() und zip() verwendet.
itertools.repeat(object,times)
Wird als Argument in der map()-Funktion verwendet.
Es wird als Argument in der zip()-Funktion verwendet.
Iteratoren, die auf der kürzesten Eingabesequenz enden:
- accumulate():
Erzeugt einen Iterator, der die akkumulierte Summe oder die akkumulierten Ergebnisse anderer binärer Funktionen zurückgibt, die im func-Parameter angegeben sind.
In der Regel entspricht die Anzahl der Elemente in der Ausgabe-Iterable der Anzahl der Elemente in der Eingabe-Iterable.
Wenn der Initial-Parameter angegeben ist, wird er akkumuliert, so dass die Ausgabe-Iterable ein Element mehr enthält als die Eingabe-Iterable.functools.reduce()
gibt bei ähnlicher Funktion nur den endgültigen kumulierten Wert zurück.
Initialparameter wird inPython version 3.8
eingeführt
itertools.accumulate(iterable,func,*,initial=None)
2. chain():
Erzeugt einen Iterator, der Elemente aus der ersten Iterablen zurückgibt, bis er erschöpft ist, und dann zur nächsten Iterablen übergeht. Es behandelt aufeinanderfolgende Sequenzen als eine einzige Sequenz.itertools.chain(*iterables)
3. chain.from_iterable():
Diese Funktion nimmt eine Iterable als Eingabeargument und gibt eine abgeflachte Iterable zurück, die alle Elemente in der Eingabe-Iterable enthält. Alle Elemente in der Eingabe-Iterable sollten iterabel sein, ansonsten wird ein TypeError ausgelöst.
chain.from_iterable(iterable)
5.dropwhile():
Erzeugen Sie einen Iterator, der Elemente aus der Iterable ausgibt, solange das Prädikat True ist, und danach jedes Element zurückgibt.
Der Iterator produziert keine Ausgabe, bis das Prädikat zuerst False wird.
itertools.dropwhile(predicate,iterable)
6.takewhile():
Erstelle einen Iterator, der Elemente aus der Iterable zurückgibt, solange das Prädikat True ist.
itertools.takewhile(predicate,iterable)
7. filterfalse():
Erzeugen Sie einen Iterator, der Elemente aus der Iterable filtert und nur die zurückgibt, für die das Prädikat False ist.Wenn das Prädikat None ist, werden Elemente zurückgegeben, die False sind.filter()
Die Methode gibt einen Iterator zurück, der Elemente einer Iterable enthält, für die die Funktion True liefert.
itertools.filterfalse(predicate,iterables)
8.zip_longest():
Erzeugt einen Iterator, der Elemente aus jeder der Iterablen zusammenfasst. Wenn die Iterablen eine ungerade Länge haben, wird der fehlende Wert mit dem Wert aufgefüllt. Die Iteration wird fortgesetzt, bis die längste Iterabel erschöpft ist.
In zip() wird die Iteration fortgesetzt, bis die kürzeste Iterabel erschöpft ist.
itertools.zip_longest(*iterables,fillvalue=None)
9. starmap():
Erzeugt einen Iterator, der die Funktion unter Verwendung von Argumenten aus der Iterable berechnet. Wird anstelle von map() verwendet, wenn die Argumente bereits in Tupeln aus einer einzelnen Iterable gruppiert sind (die Daten wurden „vorgezippt“).
itertools.starmap(function,iterable)
10. islice():
Erzeugt einen Iterator, der ausgewählte Elemente aus der Iterable zurückgibt. Wenn start gleich None
ist, dann beginnt die Iteration bei Null. Wenn step None
ist, dann ist der Schritt standardmäßig eins.Wenn stop None
ist, dann wird die Iteration fortgesetzt, bis der Iterator erschöpft ist, wenn überhaupt; andernfalls hält er an der angegebenen Position an. islice()
unterstützt keine negativen Werte für start,stop und step.
itertools.islice(iterable,stop)
itertools.islice(iterable, start, stop)
11.tee():
Return n unabhängige Iteratoren aus einer einzigen Iterable.
itertools.tee(iterable,n=2)
12. groupby():
Erzeugen Sie einen Iterator, der aufeinanderfolgende Schlüssel und Gruppen aus der Iterable zurückgibt.
key ist eine Funktion, die den Schlüsselwert für jedes Element berechnet.Wenn key nicht angegeben wird oder None ist, ist key standardmäßig eine Identitätsfunktion und gibt das Element unverändert zurück.
itertools.groupby(iterable,key=None)
Kombinatorische Iteratoren:
- product():
Kartesisches Produkt von Eingabe-Iterablen.
Kartesisches Produkt Definition: Das Produkt von Menge X und Menge Y ist die Menge, die alle geordneten Paare ( x, y ) enthält, für die x zu X und y zu Y gehört.
Um das Produkt einer Iterablen mit sich selbst zu berechnen, geben Sie die Anzahl der Wiederholungen mit dem optionalen Argument des Schlüsselworts repeat an. Zum Beispiel bedeutet product(A, repeat=4) das gleiche wie product(A, A, A, A).
itertools.product(*iterables,repeat)
2. permutations():
Gibt aufeinanderfolgende r
Längen-Permutationen von Elementen in der Iterable zurück. Wenn r nicht angegeben wird oder None ist, dann entspricht r standardmäßig der Länge der Iterablen und es werden alle möglichen Permutationen voller Länge generiert.
Die Permutationstupel werden in lexikografischer Reihenfolge entsprechend der Reihenfolge der Eingabe-Iterablen ausgegeben. Wenn also die Eingabe-Iterable sortiert ist, werden die Kombinationstupel in sortierter Reihenfolge ausgegeben.
Elemente werden aufgrund ihrer Position als eindeutig behandelt, nicht aufgrund ihres Wertes. Wenn also die Eingabeelemente eindeutig sind, gibt es keine Wiederholungen in jeder Permutation.
itertools.permutations(iterable,r=None)
Hinweis: Bei Permutationen ist die Reihenfolge der Elemente wichtig.
3. combinations():
Return r
length subsequences of elements from the input iterable.
Die Kombinationstupel werden in lexikografischer Reihenfolge entsprechend der Reihenfolge der input iterable ausgegeben. Wenn also die Eingabe-Iterabel sortiert ist, werden die Kombinationstupel in sortierter Reihenfolge ausgegeben.
Lexikografische Ordnung bedeutet die Art der Anordnung von Wörtern in alphabetischer Reihenfolge ihrer Komponentenbuchstaben.
Elemente werden aufgrund ihrer Position als eindeutig behandelt, nicht aufgrund ihres Wertes. Wenn also die Eingabeelemente eindeutig sind, gibt es keine Wiederholungen in jeder Kombination.
itertools.combinations(iterable, r)
4. combinations_with_replacement():
Return r
length subsequences of elements from the input iterable allowing individual elements to be repeated more than once.
itertools.combinations_with_replacement(iterable, r)
Note:
1. Used as an argument in map() and zip():
count(),repeat()
repeat()- supply stream of constant values to map() or zip() function.
count()-it will supply different values to map() or zip() function.2.Difference between cycle() and repeat():
cycle()-iterates over the same object again and again
repeat()-returns the same object again and again.3.Difference between reduce() and itertools.accumulate():
reduce():
* It will return only the final accumulated value.
* First argument should be function and second argument should be iterable.
accumulate()
* It will return the running accumulated value.The elements in the output iterable will be equal to elements in the input iterable,if initial value is not mentioned.
* First argument should be iterable and second argument should be function.4.Difference between filter() and itertools.compress():
* filter()function-filters the given iterable with the help of function that test each element in the iterable is True or not.
* compress():filters the given iterable based on the corresponding element in the selector. Iterable containing True /False is given as selector.5.Difference between filter() and itertools.filterfalse():
*filter():Construct an iterator from the elements of iterable for which function returns True.
*filterfalse():Construct an iterator from the elements of iterable for which function returns False.6.Difference between zip() and itertools.zip_longest():
*zip():Iteration continues until shortest iterable is exhausted.
*zip_longest():Iteration continues until longest iterable is exhausted.7.Difference between list slicing and itertools.islice():
*List slicing creates new list
*islice()-Returns an iterator.We can loop through the iterator,in the way we want.
8.Difference between itertools.permutations() and itertools.combinations():
* itertools.permutations():Order of the elements does matters.
*itertools.combinations():Order of the elements doesn’t matters.
Both combinations and permutations doesn’t repeat values.
9.Difference between itertools.combinations() and itertools.combinations_with_replacement
* combinations():Order of element doesn’t matters and doesn’t repeat values.
* combinations_with_replacement():Order of element doesn’t matters and it repeats values.10.Difference between itertools.takewhile() and itertools.dropwhile():
* takewhile():Make an iterator that returns element from the iterable as long as the predicate is True.
* dropwhile():Make an iterator that drops element from the iterable as long as the predicate is True afterwards returns every element.