Itertoolfunktionen¶

Die folgenden Modulfunktionen konstruieren und geben Iteratoren zurück. Einige providestreams von unendlicher Länge, so sollten sie nur durch Funktionen orloops zugegriffen werden, die den Strom abschneiden.

itertools.accumulate(iterierbar)¶

Erstellen Sie einen Iterator, der akkumulierte Summen oder akkumulierte Ergebnisse anderer Binärfunktionen zurückgibt (angegeben über das Argument optionalfunc).,

Wenn func angegeben wird, sollte es eine functionof zwei Argumente sein. Elemente der Eingabe iterable kann jeder Typ seindas kann als Argumente für func akzeptiert werden. (Zum Beispiel mitder Standardoperation von addition können Elemente ein beliebiger addabletype sein, einschließlich Decimal oderFraction.)

Normalerweise stimmt die Anzahl der ausgegebenen Elemente mit der iterierbaren Eingabe überein.Wenn jedoch das Schlüsselwort Argument initial bereitgestellt wird, führt Dieakkumulation mit dem Anfangswert ab, so dass der outputhas ein weiteres Element als die Eingabe iterierbar.,

entspricht in etwa:

Es gibt eine Reihe von Verwendungen für das Argument func. Es kann aufmin() für ein laufendes Minimum, max() für ein laufendes Maximum oderoperator.mul() für ein laufendes Produkt gesetzt werden. Amortisierungstabellen können durch Anhäufung von Zinsen und Anwenden von Zahlungen erstellt werden. Relationen erster Ordnung können modelliert werden, indem der Anfangswert in der Iteration angegeben wird und nur die kumulierte Summe im func-Argument verwendet wird:

Siehe functools.reduce() für eine ähnliche Funktion, die nur den kumulierten Endwert zurückgibt.,

Neu in version 3.2.

In Version 3.3 geändert: Optionaler func-Parameter hinzugefügt.

In Version 3.8 geändert: Optionaler Anfangsparameter hinzugefügt.

itertools.chain(*iterables)¶

Erstellen Sie einen Iterator, der Elemente vom ersten iterable bis zum nächsten iterable zurückgibt. Wird zur Behandlung aufeinanderfolgender Sequenzen als einzelne Sequenz verwendet.,Entspricht ungefähr:

def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element

classmethodchain.from_iterable(iterierbar)¶

Alternativer Konstruktor für chain(). Ruft verkettete Eingaben von einem asingle iterable Argument ab, das träge ausgewertet wird. Etwa äquivalent zu:

def from_iterable(iterables): # chain.from_iterable() --> A B C D E F for it in iterables: for element in it: yield element

itertools.combinations(iterierbar, r)¶

Return r Länge untersequenzen von Elementen aus der input-durchsuchbar.,

Die Kombinationstupel werden in lexikographischer Reihenfolge entsprechend der Reihenfolge der Eingabe iterierbar ausgegeben. Wenn also die Eingabe iterabel sortiert ist, werden die Kombinationstupel in sortierter Reihenfolge erzeugt.

Elemente werden basierend auf ihrer Position als eindeutig behandelt, nicht auf ihrem Wert. Wenn also die Eingabeelemente eindeutig sind, gibt es in jeder Kombination keine Wiederholungswerte.,

entspricht in etwa:

Der Code für combinations() kann auch als Folge von permutations() nach dem Filtern von Einträgen ausgedrückt werden, bei denen die Elemente nicht sortiert sind (entsprechend ihrer Position im Eingabepool):

Die Anzahl der zurückgegebenen Elemente ist wenn 0 <= r <= noder Null, wenn r > n.,

itertools.combinations_with_replacement(iterierbar, r)¶

Return r Länge untersequenzen der Elemente aus dem input iterableallowing einzelne Elemente wiederholt werden, mehr als einmal.

Die Kombinationstupel werden in lexikographischer Reihenfolge entsprechend der Reihenfolge der Eingabe iterierbar ausgegeben. Wenn also die Eingabe iterabel sortiert ist, werden die Kombinationstupel in sortierter Reihenfolge erzeugt.

Elemente werden basierend auf ihrer Position als eindeutig behandelt, nicht auf ihrem Wert. Wenn also die Eingabeelemente eindeutig sind, sind die generierten Kombinationenwird auch eindeutig sein.,

entspricht in etwa:

Der Code für combinations_with_replacement() kann auch als Folge von product() nach dem Filtern von Einträgen ausgedrückt werden, bei denen die Elementensind nicht in sortierter Reihenfolge (entsprechend ihrer Position im Eingabepool):

Die Anzahl der zurückgegebenen Elemente ist (n+r-1)! / r! / (n-1)! wenn n > 0.

Neu in version 3.1.,

itertools.compress(Daten, Selektoren)¶

Erstellen Sie einen Iterator, der Elemente aus Daten filtert und nur diejenigen zurückgibt, die ein entsprechendes Element in Selektoren enthalten, das Trueauswertet.Stoppt, wenn entweder die Daten oder Selektoren Iterables erschöpft ist.Etwa äquivalent zu:

def compress(data, selectors): # compress('ABCDEF', ) --> A C E F return (d for d, s in zip(data, selectors) if s)

Neu in version 3.1.

itertools.count(start=0, Schritt=1)¶

Erstellen Sie einen Iterator, der gleichmäßige Werte ab der Zahl zurückgibt Start., Oft als Argument für map() verwendet, um aufeinanderfolgende Datenpunkte zu generieren.Wird auch mit zip() zum Hinzufügen von Sequenznummern verwendet. Ungefähr äquivalent zu:

def count(start=0, step=1): # count(10) --> 10 11 12 13 14 ... # count(2.5, 0.5) -> 2.5 3.0 3.5 ... n = start while True: yield n n += step

Beim Zählen mit Gleitkommazahlen kann manchmal eine bessere Genauigkeit erzielt werden, indem multiplikativer Code wie ersetzt wird: (start + step * ifor i in count()).

Geändert in Version 3.1: Schrittargument hinzugefügt und nicht ganzzahlige Argumente zulässig.,

itertools.cycle(iterierbar)¶

Erstellen Sie einen Iterator, der Elemente aus dem iterierbaren zurückgibt und jeweils eine Kopie davon speichert.Wenn der Iterable erschöpft ist, geben Sie Elemente aus der gespeicherten Kopie zurück. Wiederholt auf unbestimmte Zeit. In etwa äquivalent zu:

Hinweis: Dieses Mitglied des Toolkits erfordert möglicherweise einen erheblichen zusätzlichen Speicher (abhängig von der Länge der Iteration).,

itertools.dropwhile(Prädikat, iterierbar)¶

Machen Sie einen Iterator, der Elemente aus dem Iterierbaren löscht, solange das Prädikat wahr ist; danach gibt jedes Element zurück. Beachten Sie, dass der Iterator nicht produzierenjede Ausgabe, bis das Prädikat zuerst falsch wird, so dass es eine Lengthystart-up-Zeit haben kann. Ungefähr äquivalent zu:

itertools.filterfalse(Prädikat, iterierbar)¶

Erstellen Sie einen Iterator, der Elemente aus iterierbaren Elementen filtert und nur diejenigen zurückgibt, für die das Prädikat False., Wenn Prädikat None zurück itemsthat sind falsch. Ungefähr äquivalent zu:

itertools.groupby(iterable, key=None)¶

Erstellen Sie einen Iterator, der aufeinanderfolgende Schlüssel und Gruppen aus dem iterable zurückgibt.Der Schlüssel ist eine Funktion, die einen Schlüsselwert für jedes Element berechnet. Wenn notspecified oder None„, key standardmäßig eine Identität, Funktion und returnsthe-element unverändert. Im Allgemeinen muss das Iterable bereits sortiert seindie gleiche Schlüsselfunktion.,

Der Betrieb von groupby() ähnelt dem uniq filter in Unix. Itgenerates eine Pause oder eine neue Gruppe zu jeder Zeit den Wert der Taste wechselt die Funktion(das ist, warum es ist normalerweise notwendig, um sortiert haben, werden die Daten mit der gleichen keyfunction). Dieses Verhalten unterscheidet sich von der SQL-GRUPPE, in der Commonelements unabhängig von ihrer Eingabereihenfolge aggregiert werden.

Die zurückgegebene Gruppe ist selbst ein Iterator, der das zugrunde liegende iterablewith groupby()., Da die Quelle gemeinsam genutzt wird, ist die vorherige Gruppe nicht mehr sichtbar, wenn das groupby() – Objekt erweitert wird. Wenn diese Daten später benötigt werden, sollten sie als Liste gespeichert werden:

groupby() entspricht in etwa:

itertools.islice(iterable, stop)¶

itertools.islice(iterable, start, stop)

Erstellen Sie einen Iterator, der ausgewählte Elemente aus dem iterable zurückgibt. Wenn start nicht Null ist, werden Elemente aus dem Iterablen übersprungen, bis der Start erreicht ist.,Danach werden Elemente nacheinander zurückgegeben, es sei denn, der Schritt ist höher als 1, was dazu führt, dass Elemente übersprungen werden. Wenn stop None, dann iterationcontinues, bis der iterator erschöpft ist, wenn überhaupt; sonst, hält es bei thespecified position. Im Gegensatz zum regulären Schneiden unterstützt islice() keine negativen Werte für start, stop oder step. Kann verwendet werden, um relatedfields aus Daten zu extrahieren, bei denen die interne Struktur abgeflacht wurde (z. B. kann ein Amulti-Line-Bericht in jeder dritten Zeile ein Namensfeld auflisten)., Ungefähr äquivalent zu:

Wenn start None, beginnt die Iteration bei Null. Wenn Schritt None,dann ist der Schritt standardmäßig eins.

itertools.permutations(iterierbar, r=None)¶

Zurück aufeinanderfolgenden r Länge Permutationen der Elemente in der durchsuchbar.

Wenn r nicht angegeben ist oder None ist, dann ist r standardmäßig die Länge der iterierbaren und alle möglichen Permutationen in voller Länge werden generiert.

Die Permutationstupel werden in lexikographischer Reihenfolge entsprechend der Reihenfolge der Eingabe iterierbar ausgegeben., Wenn also die Eingabe iterabel sortiert ist, werden die Kombinationstupel in sortierter Reihenfolge erzeugt.

Elemente werden basierend auf ihrer Position als eindeutig behandelt, nicht auf ihrem Wert. Wenn also die Eingabeelemente eindeutig sind, gibt es in jeder Permutation keine repeatvalues.,

entspricht in etwa:

Der Code für permutations() kann auch als Folge vonproduct() ausgedrückt werden, gefiltert, um Einträge mit wiederholten Elementen auszuschließen (dieaus derselben Position im Eingabepool):

Die Anzahl der zurückgegebenen Elemente ist n! / (n-r)! wenn 0 <= r <= noder Null, wenn r > n.

itertools.product(*iterables, repeat=1)¶

das kartesische Produkt der Eingang iterables.,

Die verschachtelten Schleifen laufen wie ein Kilometerzähler, wobei das Element ganz rechts bei jeder Iteration voranschreitet. Dieses Muster erstellt eine lexikografische Reihenfolge, sodass, wenn die Iterablen der Eingabe sortiert sind, die Produkttupel in sortedorder ausgegeben werden.

Um das Produkt eines Iterablen mit sich selbst zu berechnen, geben Sie die Anzahl der Repetitionen mit dem optionalen Schlüsselwortargument repeat an. Zum Beispiel bedeutetproduct(A, repeat=4) dasselbe wie product(A, A, A, A).,

Diese Funktion entspricht in etwa dem folgenden Code, mit der Ausnahme, dass die tatsächliche Implementierung keine Zwischenergebnisse im Speicher aufbaut:

Bevor product() ausgeführt wird,werden die Eingabe-Iterablen vollständig verbraucht, wobei Wertepools im Speicher verbleiben, um die Produkte zu generieren. Dementsprechend ist es nur bei endlichen Eingaben nützlich.

itertools.repeat(Objekt)¶

Erstellen Sie einen Iterator, der das Objekt immer wieder zurückgibt. Läuft unbestimmtunless das Argument times wird angegeben., Wird als Argument für map() fürvariante Parameter für die aufgerufene Funktion verwendet. Wird auch mit zip() verwendet, um einen invarianten Teil eines Tupeldatensatzes zu erstellen.

entspricht in etwa:

Eine häufige Verwendung für Wiederholungen ist die Bereitstellung eines Stroms konstanter Werte an mapor zip:

>>> list(map(pow, range(10), repeat(2)))

itertools.starmap(Funktion, iterierbar)¶

Erstellen Sie einen Iterator, der die Funktion mit argumente aus dem iterierbaren erhalten., Wird anstelle von map() wenn Argumentparameter bereits in Tupeln aus einem einzelnen Iterable gruppiert sind (die Daten wurden“vorverzippt“). Thedifference zwischen map() und starmap() parallels die distinctionbetween function(a,b) und function(*c). Ungefähr äquivalent zu:

def starmap(function, iterable): # starmap(pow, ) --> 32 9 1000 for args in iterable: yield function(*args)

itertools.takewhile(Prädikat, iterierbar)¶

Erstellen Sie einen Iterator, der Elemente aus dem Iterierbaren zurückgibt, solange das Prädikat wahr ist., Etwa äquivalent zu:

def takewhile(predicate, iterable): # takewhile(lambda x: x<5, ) --> 1 4 for x in iterable: if predicate(x): yield x else: break

itertools.tee(iterierbar, n=2)¶

Zurück n unabhängige Iteratoren aus einem einzigen durchsuchbar.

Der folgende Python-Code erklärt, was tee tut (obwohl die tatsächliche Implementierung komplexer ist und nur eine einzige underlyingFIFO-Warteschlange verwendet).

entspricht in etwa:

Sobald tee() eine Aufteilung vorgenommen hat, sollte das ursprüngliche Iterable nirgendwo anders verwendet werden; Andernfalls könnte das Iterable ohne Benachrichtigung der Tee-Objekte fortgeschritten werden.,

tee Iteratoren sind nicht threadsicher. RuntimeError können beraised, wenn die gleichzeitige Nutzung Iteratoren zurück durch den gleichen tee()anrufen, auch wenn die ursprüngliche iterierbar ist threadsicher.

Dieses Itertool kann eine erhebliche zusätzliche Speicherung erfordern (abhängig davon, wie viele temporäre Daten gespeichert werden müssen). Im Allgemeinen, wenn ein Iterator verwendetdie meisten oder alle Daten, bevor ein anderer Iterator startet, ist es schneller,list() anstelle von tee().,

itertools.zip_longest(*iterables, fillvalue=None)¶

Machen Sie einen iterator, Aggregate, Elemente aus jeder der iterables. Wenn die Silben ungleich lang sind, werden fehlende Werte mit fillvalue ausgefüllt.Die Iteration wird fortgesetzt, bis die längste Iteration erschöpft ist. Ungefähr äquivalent zu:

Wenn eine der Iterablen potenziell unendlich ist, sollte die zip_longest() – Funktion mit etwas umbrochen werden, das die Anzahl der Aufrufe begrenzt(z. B. islice() oder takewhile())., Wenn nicht angegeben,ist fillvalue standardmäßig None.