リスト内包表記がリストの追加よりも優れている理由
リスト内包表記は単なる表現力の砂糖として認識されているにもかかわらず、リスト内包表記はリストの追加よりも速度に大きな利点があることが実証されています。 。この相違は、表現上の違いを超えて広がります。
説明のために、次の timeit ベンチマークを考えてみましょう:
<code class="python">import timeit time = timeit.timeit('t=[]\nfor i in range(10000):\n t.append(i)', number=10000) time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>
結果から、リスト内包表記はリストに追加するよりも約 50% 高速に実行されることがわかります。
速度が向上する理由
リスト内包表記は、いくつかのパフォーマンスの最適化を利用します:
例
次のコード スニペットを考えてみましょう:
<code class="python">def f1(): l = [] # Create a new list for i in range(5): # Iterate through a range l.append(i) # Append each number to the list def f2(): [i for i in range(5)] # Use list comprehension to create a new list</code>
これらの関数を dis モジュールで逆アセンブルすると、違いが明らかになります。
<code class="python">dis.dis(f1) dis.dis(f2)</code>
f1 では、リストの作成と、append 属性 (オフセット 18 と 20) の読み込みと呼び出しを観察します。ただし、f2 ではこれらの操作が存在しないため、より効率的なコードが得られます。
結論
リスト内包表記は、属性の読み込み、関数呼び出し、および関数呼び出しを排除することでパフォーマンスの向上を実現します。機能フレームの一時停止と再開に関連するオーバーヘッド。したがって、速度が優先される新しいリストの作成には、これらが推奨されることがよくあります。
以上がPython ではリストの内包表記がリストの追加よりも速いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。