首頁  >  文章  >  後端開發  >  為什麼 Python 列表推導式比追加列表快得多?

為什麼 Python 列表推導式比追加列表快得多?

DDD
DDD原創
2024-11-01 12:54:29185瀏覽

 Why Are Python List Comprehensions So Much Faster Than Appending to Lists?

為什麼 Python 列表推導式優於列表追加

Python 程式設計師經常注意到列表推導式和追加到列表之間存在顯著的效能差距。雖然列表推導式通常被認為是語法上的便利,但它們表現出超越單純表達能力的卓越速度。

為了說明這種現象,請考慮以下 timeit 測量:

>>> import timeit
>>> timeit.timeit(stmt='''
t = []
for i in range(10000):
    t.append(i)''', number=10000)
9.467898777974142

>>> timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000)
4.1138417314859

從測量結果來看,列表理解比追加快了近 50%。讓我們深入探討根本原因。

語法糖謬誤

列表推導式不只是常規 for 迴圈的語法糖。它們避免了與每次迭代中存取和呼叫追加屬性相關的開銷。這消除了多個函數幀暫停和恢復,這本質上比直接構造列表慢。

字節碼比較

檢查兩種方法的反組譯字節碼可以揭示它們的效能差異:

# Appending to a List
  18 LOAD_FAST                0 (l)
  20 LOAD_METHOD              1 (append)
  22 LOAD_FAST                1 (i)
  24 CALL_METHOD              1
  26 POP_TOP

# List Comprehension
              2 BUILD_LIST               0
              8 LOAD_FAST                1 (i)
             10 LIST_APPEND              2

第一個函數中的append方法呼叫會產生額外的開銷,而清單推導式則直接擴展新建立的清單。

實際影響

在效能至關重要的場景中,列表推導式應該是比附加到清單更好的方法。它們的卓越速度源自於它們繞過無關字節碼和函數呼叫開銷的能力。

以上是為什麼 Python 列表推導式比追加列表快得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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