ホームページ > バックエンド開発 > Python チュートリアル > Python でイテレータを効率的にチャンク化するにはどうすればよいですか?

Python でイテレータを効率的にチャンク化するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-29 08:51:10
オリジナル
969 人が閲覧しました

How Can I Efficiently Chunk an Iterator in Python?

チャンク内のイテレータの反復

イテレータ l = [1, 2, 3, 4, 5, 6] を所有するシナリオを考えてみましょう。 , 7] そしてそれをサイズ 3 のチャンクに分割したいとすると、次の内容を含むイテレータが生成されます。 [[1, 2, 3], [4, 5, 6], [7]].

itertools ソリューション

Python 標準ライブラリは便利なソリューションを提供しますitertools モジュール内:

import itertools

def grouper(iterable, n, *, incomplete='fill', fillvalue=None):
    """Collect data into non-overlapping fixed-length chunks or blocks."""

    args = [iter(iterable)] * n
    if incomplete == 'fill':
        return zip_longest(*args, fillvalue=fillvalue)
    elif incomplete == 'strict':
        return zip(*args, strict=True)
    elif incomplete == 'ignore':
        return zip(*args)
    else:
        raise ValueError('Expected fill, strict, or ignore')

chunks = list(grouper(l, 3))  # Output: [[1, 2, 3], [4, 5, 6], [7]]
ログイン後にコピー

標準ライブラリ拡張バージョン

最近のバージョンの itertools レシピで導入されたバッチ処理された特殊な関数は、このチャンク要件に正確に対処します:

from itertools import batched

chunks = list(batched(l, 3))  # Output: [[1, 2, 3], [4, 5, 6], [7]]
ログイン後にコピー

非一般的なソリューション

特にシーケンスの場合、最後のチャンクを効果的に処理する簡単なアプローチは:

chunks = [my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]
ログイン後にコピー

以上がPython でイテレータを効率的にチャンク化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート