Iterieren über überlappende Wertepaare in Python
Beim Iterieren über eine Liste in Python müssen Sie möglicherweise sowohl auf das aktuelle Element als auch auf das zugreifen nächsten Element gleichzeitig. Traditionell wurde dies mit Code wie dem folgenden erreicht:
for current, next in zip(the_list, the_list[1:]): # Do something
Python 3.8 führte jedoch einen effizienteren Weg ein, dies zu erreichen:
Verwendung der paarweisen Funktion
Die Python-Dokumentation bietet zu diesem Zweck eine einfache paarweise Funktion:
import itertools def pairwise(iterable): a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
Diese Funktion erstellt zwei Iteratoren a und b, die auf das erste Element der Eingabe-Iterable verweisen. Der Iterator b wird dann um einen Schritt vorgerückt, was dazu führt, dass a auf das aktuelle Element und b auf das nächste Element zeigt. Anschließend wird die Zip-Funktion verwendet, um Paare dieser Elemente zu erstellen.
Für Python 2
Für Python 2 können Sie eine ähnliche paarweise Funktion mit itertools.izip verwenden Funktion statt Zip:
import itertools def pairwise(iterable): a, b = itertools.tee(iterable) next(b, None) return itertools.izip(a, b)
Generalizing to Multiple Elemente
Die paarweise Funktion kann verallgemeinert werden, um größere Fenster von Elementen zu erzeugen, indem der n-Parameter im Tee-Aufruf angepasst wird. Um beispielsweise Paare aus drei Elementen zu erstellen, können Sie Folgendes verwenden:
def threes(iterator): 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 diese Technik eine erhebliche Menge an Speicher verbrauchen kann wenn ein Iterator weiter vorrückt als andere. Dies kann passieren, wenn das Fenster groß ist oder wenn das ursprüngliche Iterable viele Elemente enthält.
Das obige ist der detaillierte Inhalt vonWie kann ich überlappende Paare (oder Tripel) von Elementen in einer Python-Liste effizient iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!