Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man überlappende Paare (und Tripel) in Python-Listen effizient iterieren?

Wie kann man überlappende Paare (und Tripel) in Python-Listen effizient iterieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 06:00:18809Durchsuche

How to Efficiently Iterate Over Overlapping Pairs (and Triples) in Python Lists?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn