ホームページ > バックエンド開発 > Python チュートリアル > Python のジェネレーター内包表記とリスト内包表記の違いは何ですか?

Python のジェネレーター内包表記とリスト内包表記の違いは何ですか?

Patricia Arquette
リリース: 2024-11-27 06:45:12
オリジナル
907 人が閲覧しました

How Do Generator Comprehensions Differ from List Comprehensions in Python?

ジェネレーター内包表記の概念を明らかにする

ジェネレーター内包表記は、よく知られた対応するリスト内包表記と同様、Python の強力なツールであり、効率的に生成する

どのように機能しますか?

ジェネレーター内包表記を作成するときは、基本的に、項目を必要に応じて一度に 1 つずつ遅延生成する式を作成します。 。生成されたすべての項目を一度にメモリに格納するリスト内包表記とは異なり、ジェネレーター内包表記は要求に応じて次の項目のみを生成します。

次の例を考えてみましょう。

>>> my_list = [1, 3, 5, 9, 2, 6]
>>> filtered_list = [item for item in my_list if item > 3]  # List comprehension
>>> print(filtered_list)
[5, 9, 6]
ログイン後にコピー

この例では、filtered_list はmy_list の 3 より大きいすべての要素を含むリスト。

さて、ジェネレーターを作成しましょう同等の内包表記:

>>> filtered_gen = (item for item in my_list if item > 3)  # Generator comprehension
>>> print(filtered_gen)  # Notice the generator object
<generator object <genexpr> at 0x7f2ad75f89e0>
ログイン後にコピー

ご覧のとおり、filtered_gen はリストではなくジェネレーター オブジェクトです。これは、シーケンスを反復するための遅延メカニズムを提供します。 next(filtered_gen) を呼び出すと、次の項目 (この場合は 5) が取得されます。後続の呼び出しでは 9 と 6 が生成されます。

メモリの最適化

ジェネレーターの内包の主な利点は、メモリを節約できることです。項目をオンデマンドで生成することで、すべての項目のメモリを一度に消費することがなくなります。これは大規模なシーケンスの場合に重要になります。

ユースケース

ジェネレーターの内包表記はシナリオに最適です。

  • アイテムを 1 つずつ処理しながら、大きなシーケンスを反復処理します。
  • 反復中に項目に対して複雑な計算を実行します。
  • 特に潜在的に大規模なシーケンスを操作する場合は、メモリを節約します。

結論

ジェネレーター内包表記はリスト内包表記の有用性を拡張しますオンデマンドでシーケンスを生成するためのメモリ効率の高いメカニズムを提供することによって。これらは、柔軟性、パフォーマンス上の利点、および潜在的に大規模なシーケンスを効率的に処理する機能を提供します。

以上がPython のジェネレーター内包表記とリスト内包表記の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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