Python ではリストの内包表記がリストの追加よりも速いのはなぜですか?
リスト内包表記がリストの追加よりも優れている理由
リスト内包表記は単なる表現力の砂糖として認識されているにもかかわらず、リスト内包表記はリストの追加よりも速度に大きな利点があることが実証されています。 。この相違は、表現上の違いを超えて広がります。
説明のために、次の 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% 高速に実行されることがわかります。
速度が向上する理由
リスト内包表記は、いくつかのパフォーマンスの最適化を利用します:
- 属性のロードと関数呼び出しの排除:リストの追加では、各反復でリストの append 属性をロードし、それを関数として呼び出す必要があります。リスト内包表記は、オンデマンドで新しいリストを作成することでこのオーバーヘッドを排除します。
- 一時停止と再開と即時リスト作成: 関数のフレームの一時停止と再開は、一般にオンデマンドでリストを直接作成するよりも遅くなります。 .
例
次のコード スニペットを考えてみましょう:
<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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。
