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
Freigeben: 2024-12-22 06:00:18
Original
871 Leute haben es durchsucht

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage