Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich einen Rolling- oder Sliding-Window-Iterator in Python effizient implementieren?

Wie kann ich einen Rolling- oder Sliding-Window-Iterator in Python effizient implementieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-17 22:21:231011Durchsuche

How Can I Efficiently Implement a Rolling or Sliding Window Iterator in Python?

Rollende oder gleitende Fenster-Iteratoren

Rollende oder gleitende Fenster-Iteratoren ermöglichen das Durchlaufen einer Sequenz in überlappenden Fenstern einer bestimmten Größe. Das Iterieren über eine Sequenz mit einer Fenstergröße von 1 ist im Wesentlichen die Standard-Python-Iteration.

Effiziente und elegante Implementierung

Die folgende Implementierung aus der Python-Dokumentation nutzt das itertools-Modul für mehr Effizienz:

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

Implementation for Simple Iterables

Für Iterables, die als einfache Listen oder Tupel dargestellt werden, besteht ein einfacher Ansatz darin, das Iterable mit der angegebenen Fenstergröße zu durchlaufen:

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])

Ausgabe:

[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]

Das obige ist der detaillierte Inhalt vonWie kann ich einen Rolling- oder Sliding-Window-Iterator in Python effizient implementieren?. 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