Python では、リスト内包表記はリストを作成するための強力なツールです。ただし、Python 言語には、ジェネレーター式として知られる別の同様の機能も導入されています。
ジェネレーター式は、角括弧 ([]) を使用しないという点でリスト内包表記とは異なります。代わりに括弧 () を使用して、一度に 1 つずつ値を生成します。この特性により、メモリ内に完全なリストを作成せずにその場で値を生成するため、リスト内包表記よりもメモリ効率が高くなります。
提供された例では、xrange(10) の _ の str(_) は次のようになります。 0 から 9 までの数値を表す文字列のシーケンスを生成するジェネレーター式。このジェネレーター式を join に渡すと、リスト内包表記を使用するのと同じ効果がありますが、square は必要ありません。
ただし、すべての関数がジェネレーター式を受け入れられるわけではないことに注意することが重要です。 sort や len などの完全なリストを必要とする関数には、明示的なリストが必要です。
メモリの効率とパフォーマンス
一般に、ジェネレータ式はより多くのメモリを必要とします。リスト内包表記よりも効率的です。ただし、結合の場合は、リスト内包表記を使用した方が高速であり、メモリ効率も高くなります。これは、結合ではデータに対して 2 つのパスを作成する必要があり、実際のリストを使用するとすぐに作業を開始できるためです。
この場合、ジェネレーター式に対するリスト内包表記のパフォーマンス上の利点は、次の Python timeit で示されます。ベンチマーク:
>>> timeit ''.join(str(n) for n in xrange(1000)) 1000 loops, best of 3: 335 usec per loop >>> timeit ''.join([str(n) for n in xrange(1000)]) 1000 loops, best of 3: 288 usec per loop
したがって、多くの場合、ジェネレーター式にはメモリ効率の利点がありますが、関数の特定のパフォーマンス特性を考慮することが重要です。リスト内包表記とジェネレーター式のどちらかを選択するときに使用されます。
以上がリスト内包表記とジェネレーター式: Python で括弧の代わりに括弧を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。