リスト内包表記 は、オブジェクトに対して一連の操作を実行するための簡潔な構文です。項目のコレクションとその結果からの新しいリストの作成。 for ループの書き方が単に違うように見えるかもしれませんが、パフォーマンスの違いは否定できません。リスト内包表記は、多くの場合、従来の対応するものよりも大幅に高速に実行されます。
主な違いは、リスト内包表記とリストへの追加が関数呼び出しを処理する方法にあります。追加の場合、ループの反復ごとに、リストの append 属性をロードし、関数として呼び出す必要があります。このプロセスによりオーバーヘッドが追加され、実行が遅くなります。
次のコード スニペットを考えてみましょう:
<code class="python">t = [] for i in range(10000): t.append(i) # Using list comprehension t = [i for i in range(10000)]</code>
提供された例に示されているように、リスト内包バージョンは追加メソッドよりも 50% 高速に実行されます。 。この違いは、リストのサイズが大きくなるにつれてより明らかになります。
さらに、これらの関数のバイトコード逆アセンブリを調べてみましょう:
<code class="python"># Appending to a list dis.dis(appending_function) # List comprehension dis.dis(list_comprehension_function)</code>
バイトコードを比較すると、関数がリスト内包表記を使用すると、append 属性のロードと呼び出しが必要ないため、オーバーヘッドが削減され、パフォーマンスが向上します。
したがって、項目のコレクションに操作を適用して新しいリストを作成するときに、リスト内包表記が出現します。速度の利点と構文の優雅さにより、優れた選択肢となります。
以上が質問の形式と記事の焦点を考慮した、いくつかのタイトルのオプションを次に示します。 オプション 1 (直接的かつ簡潔): * リスト内包表記はリストに追加するよりも速いのはなぜですか? オプション 2 (フォの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。