ホームページ > バックエンド開発 > Python チュートリアル > Python で再利用不可能なイテレータを 2 回反復するにはどうすればよいですか?

Python で再利用不可能なイテレータを 2 回反復するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-25 09:55:39
オリジナル
767 人が閲覧しました

How Can I Iterate Twice Over a Non-Reusable Iterator in Python?

再利用不可能なものを 2 回繰り返す: リセットする理由と方法

イテレータを扱う場合、データ構造を 2 回繰り返すと問題になる可能性があります、一度だけ消費できます。 Python では、イテレータはリスト イテレータ、ジェネレータ式、その他のさまざまなオブジェクトで使用されます。

次のコードを考えてみましょう。

def test(data):
    for row in data:
        print("first loop")
    for row in data:
        print("second loop")
ログイン後にコピー

データがリスト イテレータやジェネレータ式では、イテレータが最初のループですでに消費されているため、コードは「最初のループ」を出力しますが、「2 番目のループ」は出力しません。 loop.

なぜこれが起こるのかを理解するには、イテレータがどのように動作するかを知る必要があります。イテレータは、一連の値を反復処理するステートフル オブジェクトです。反復中にイテレータの状態が更新され、最後の値が返されると、反復は完全に停止します。

したがって、同じイテレータを 2 回目に反復しようとすると、すぐに StopIteration 例外が発生します。 、取得する値がこれ以上ないことを示します。これにより、2 番目のループが効果的に終了します。

再利用不可能なものを再利用するための回避策

反復子を再利用するには、次のいずれかを実行できます。

  1. リストに変換: list() を使用してイテレータをリストに変換します。データのスナップショットを作成します。このリストは問題なく複数回反復できます。
  2. 独立した反復子を作成するには tee() を使用します: データに対して複数の反復が必要な場合は、itertools.tee を使用できます。 () 複数の独立したイテレータを作成します。各イテレータは、他のイテレータに影響を与えることなく個別に反復処理できます。

イテレータの性質を理解し、これらの回避策を採用することで、Python でデータを複数回反復する必要がある状況に効果的に対処できます。

以上がPython で再利用不可能なイテレータを 2 回反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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