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中文网其他相关文章!