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