首頁 >後端開發 >Python教學 >為什麼 Python 中列表推導式比列表附加更快?

為什麼 Python 中列表推導式比列表附加更快?

Barbara Streisand
Barbara Streisand原創
2024-10-28 16:58:29218瀏覽

Why Are List Comprehensions Faster Than List Appending in 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%。

速度提高的原因

列表推導式利用多項效能最佳化:

  • 消除屬性載入和呼叫函數: 在清單追加中,每次迭代都需要載入清單的追加屬性並將其作為函數呼叫。列表推導式透過按需建立新列表來消除這種開銷。
  • 暫停和恢復與即時列表創建:暫停和恢復函數的框架通常比直接按需創建列表要慢.

示例

考慮以下程式碼片段:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn