ホームページ >バックエンド開発 >Python チュートリアル >Python でローリング ウィンドウまたはスライディング ウィンドウ イテレータを効率的に実装するにはどうすればよいですか?

Python でローリング ウィンドウまたはスライディング ウィンドウ イテレータを効率的に実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-17 22:21:23958ブラウズ

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

ローリング ウィンドウ イテレータまたはスライディング ウィンドウ イテレータ

ローリング ウィンドウ イテレータまたはスライディング ウィンドウ イテレータを使用すると、指定されたサイズの重複するウィンドウ内でシーケンスを走査できます。ウィンドウ サイズ 1 のシーケンスの反復処理は、基本的にデフォルトの Python 反復です。

効率的でエレガントな実装

Python ドキュメントの次の実装では、itertools モジュールを活用しています。増加したため効率:

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

単純な反復可能オブジェクトの実装

単純なリストまたはタプルとして表される反復可能オブジェクトの場合、単純なアプローチには、指定されたウィンドウで反復可能オブジェクトを反復処理することが含まれます。サイズ:

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

出力:

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

以上がPython でローリング ウィンドウまたはスライディング ウィンドウ イテレータを効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。