Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich überlappende Paare (oder Tripel) in einer Python-Liste effizient iterieren?
Iterieren über überlappende Wertepaare in Python
Das Iterieren über eine Liste in Python unter Berücksichtigung sowohl des „aktuellen“ als auch des „nächsten“ Elements ist ein gemeinsames Bedürfnis. Traditionell wird dies mit Code wie dem folgenden erreicht:
for current, next in zip(the_list, the_list[1:]): # Do something
Dieser Ansatz ist zwar effektiv, aber nicht der idiomatischste oder effizienteste. Eine eher pythonische Lösung ist die Verwendung der Pairwise-Funktion aus dem itertools-Modul:
import itertools def pairwise(iterable): "s -> (s0, s1), (s1, s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
Die Pairwise-Funktion erstellt zwei parallele Iteratoren, a und b, die beide auf das erste Element des ursprünglichen Iterables zeigen. Dann rückt es b um einen Schritt weiter, was dazu führt, dass a auf s0 und b auf s1 zeigt. Die Zip-Funktion paart dann die Elemente von a und b, sodass Sie überlappende Paare erhalten.
Für Python 2 können Sie itertools.izip anstelle von zip verwenden, um einen Lazy-Iterator zu erhalten:
import itertools def pairwise(iterable): "s -> (s0, s1), (s1, s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return itertools.izip(a, b)
Diese Technik kann erweitert werden, um mithilfe des n-Parameters der Tee-Funktion größere „Fenster“ zu erzeugen. Um beispielsweise Tripel zu erzeugen, können Sie Folgendes verwenden:
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)
Beachten Sie, dass die Verwendung von tee Speicher verbrauchen kann, wenn einer der Iteratoren weiter vorrückt als die anderen. In Fällen, in denen die Iteratoren jedoch im gleichen Tempo voranschreiten, ist dieser Ansatz speichereffizient und idiomatisch.
Das obige ist der detaillierte Inhalt vonWie kann ich überlappende Paare (oder Tripel) in einer Python-Liste effizient iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!