Python では、リスト内包表記はリストを生成するための簡潔な構文を提供します。ただし、角括弧を厳密に使用すると制限が生じる場合があります。興味深いことに、以下のコード スニペットは、角括弧の不可解な省略を示しています。
''.join(str(_) for _ in xrange(10))
このコードは、角括弧がないにもかかわらず、0 から 9 までの文字列を正しく結合します。この現象は、ジェネレーター式の導入によって発生します。
ジェネレーター式はリスト内包表記に似ていますが、完全なリストを作成するのではなく、段階的にデータを生成します。メモリ。これにより、大規模なデータセットのパフォーマンスが大幅に向上する可能性があります。
指定された例では、xrange(10) 式の str(_) for _ は、0 から 9 までの文字列のストリームを生成するジェネレーター式です。この式はリスト内包表記に似ていますが、根本的に異なります:
ジェネレーター式はリスト内包表記よりも効率的であることがよくありますが、これは、 join() 関数。
~ $ python -m timeit '"".join(str(n) for n in xrange(1000))' 1000 loops, best of 3: 335 usec per loop ~ $ python -m timeit '"".join([str(n) for n in xrange(1000)])' 1000 loops, best of 3: 288 usec per loop
このシナリオでは、実際のリストを join() に提供すると、データを 1 回繰り返すだけで済むため、処理が速くなり、メモリ効率も向上します。
ジェネレーター式とリスト内包表記の違いを理解することは、Python コードを最適化するために重要です。ジェネレーター式は、特定の状況においてメモリ効率と速度を向上させますが、実際のリストの作成が有益な join() のような関数にとっては、常に最良の選択であるとは限りません。
以上がジェネレーター式は、Python の `join()` 関数のリスト内包表記とどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。