Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich die Sliding-Window-Iteration in Python effizient implementieren?

Wie kann ich die Sliding-Window-Iteration in Python effizient implementieren?

DDD
Freigeben: 2024-12-29 02:37:09
Original
236 Leute haben es durchsucht

How Can I Efficiently Implement Sliding Window Iteration in Python?

Sliding-Window-Iterationstechniken

Für die Sliding-Window-Iteration über eine Iteration kann eine Basisimplementierung List-Slicing und Iteration verwenden:

def rolling_window(seq, window_size):
    it = iter(seq)
    win = [it.next() for cnt in range(window_size)]  # First window
    yield win
    for e in it:  # Subsequent windows
        win[:-1] = win[1:]
        win[-1] = e
        yield win
Nach dem Login kopieren

Effizient und elegant Lösungen

Für mehr Effizienz und Eleganz kann ein Generatorausdruck mit itertools verwendet werden:

from itertools import islice

def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ..."
    it = iter(seq)
    result = tuple(islice(it, n))
    if len(result) == n:
        yield result
    for elem in it:
        result = result[1:] + (elem,)
        yield result
Nach dem Login kopieren

Für einfachere Iterables wie Listen oder Tupel kann ein unkomplizierter Ansatz mit Bereich und Indizierung verwendet werden verwendet werden:

seq = [0, 1, 2, 3, 4, 5]
window_size = 3

for i in range(len(seq) - window_size + 1):
    print(seq[i: i + window_size])
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die Sliding-Window-Iteration in Python effizient implementieren?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage