首页  >  文章  >  后端开发  >  为什么 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