Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man überlappende Paare (und Tripel) in Python-Listen effizient iterieren?
So iterieren Sie überlappende Wertepaare aus einer Liste
Beim Arbeiten mit Listen in Python ist es oft notwendig, Werte paarweise zu iterieren. Ein gängiger Ansatz ist die Verwendung eines Konstrukts wie:
for current, next in zip(the_list, the_list[1:]): # Do something
Während dieser Code funktioniert, gibt es eine idiomatischere und effizientere Lösung, die die paarweise Funktion aus dem itertools-Modul verwendet. Hier ist eine überarbeitete Python 3.8-Implementierung:
import itertools def pairwise(iterable): "s -> (s0, s1), (s1, s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
Verwenden Sie für Python 2 itertools.izip anstelle von zip (da zip in Python 2 eine Liste anstelle eines Lazy-Iterators erstellt).
Die Die Funktion „paarweise“ erstellt zwei parallele Iteratoren, a und b, die auf dasselbe erste Element zeigen. b wird dann mit next einen Schritt weitergerückt. Die izip-Funktion kombiniert die Elemente der beiden Iteratoren zu überlappenden Paaren.
Dieser Ansatz kann auch verallgemeinert werden, um größere „Fenster“ von Werten zu verarbeiten. Um beispielsweise über Wertetripel zu iterieren, verwenden Sie die folgende Funktion:
def threes(iterator): "s -> (s0, s1, s2), (s1, s2, s3), (s2, s3, 4), ..." a, b, c = itertools.tee(iterator, 3) next(b, None) next(c, None) next(c, None) return zip(a, b, c)
Vorbehalt: Es ist wichtig zu beachten, dass, wenn einer der Iteratoren aufgrund der Bei Verwendung von next behält die Implementierung die verbrauchten Elemente im Speicher, bis alle Iteratoren sie verbraucht haben.
Das obige ist der detaillierte Inhalt vonWie kann man überlappende Paare (und Tripel) in Python-Listen effizient iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!