イテレータとイテラブルを扱うときは、それらの消費の性質を理解することが重要です。 Python では、イテレータは 1 回だけ使用できます。これは、イテレータを一度反復処理すると、そのイテレータは枯渇し、再度使用できなくなることを意味します。
次のコードを考えてみましょう。
def test(data): for row in data: print("first loop") for row in data: print("second loop")
データが空ではないイテレータ (例: list イテレータまたはジェネレータ式など)、コードは「最初のループ」を複数回出力しますが、「2 番目のループ」は出力されません。これは、反復子が最初のループ中に消費されているためです。
list/set/dict 内包表記、list()、sum()、reduce の呼び出しなど、他の形式の反復でも同じ問題が発生します。 () など。
ただし、データがリストや範囲 (シーケンス) などの別の反復可能な場合、両方のループは期待どおりに実行され、「最初に」が出力されます。各要素の「ループ」と「2 番目のループ」。これは、これらの反復可能オブジェクトは複数回反復処理できるためです。
繰り返しになりますが、反復子を使用するときは、その単一消費の性質を覚えておくことが重要です。データを再利用するには、要素をリストに保存するか、 itertools.tee() を使用して独立したイテレータを作成することを検討してください。
以上がイテレーターを 2 回反復できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。