為什麼列表推導式優於列表附加
儘管列表推導式被認為僅僅是表達糖,但它們比列表附加顯示出顯著的速度優勢。這種差異超出了表達差異。
為了說明這一點,請考慮以下 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中文網其他相關文章!