為什麼 Python List Comprehension 比 For 迴圈還快?
“THIS is Why List Comprehension is SO Efficient!” 影片用短短 5 分鐘就解釋為什麼 Python List Comprehension 比 For 迴圈還快。
其原因在於 Python 的 List Comprehension 使用了特製的 instruction (或稱指令碼) LIST_APPEND
,這個 instruction 可以節省在 for 迴圈裡呼叫 append()
方法所需的 instructions 的次數,所以讓 List Comprehension 比起 for 迴圈更具效率優勢,這種特製的 instructions 還有 SET_ADD
與 MAP_ADD
, 分別用在 set comprehension 與 dict comprehension 。
不過 List Comprehension 雖然好用,但是不適合用在有複雜的條件的情況,如果有複雜條件的 List Comprehension, 建議可以改為 for 迴圈提高可讀性,或者把條件式拆成函式,把複雜條件封裝在函式內也是 1 種不錯的解決辦法,例如:
nums = [n for n in range(0, 1_000) if valid(n)]