首页  >  文章  >  后端开发  >  为什么列表推导式比 Python 中添加到列表要快得多?

为什么列表推导式比 Python 中添加到列表要快得多?

Patricia Arquette
Patricia Arquette原创
2024-10-28 03:47:02356浏览

Why is List Comprehension Significantly Faster Than Appending to a List in Python?

为什么追加到列表比列表理解慢得多?

列表理解因其简洁和高效而在 Python 中广受欢迎。虽然它可能显示为常规 for 循环的语法快捷方式,但它提供了显着的性能优势,尤其是在将元素附加到列表时。

基准测试差异

考虑以下代码片段:

import timeit

timeit.timeit(stmt='''
t = []
for i in range(10000):
    t.append(i)''', number=10000)

timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000)

从结果中可以看出,列表理解速度明显更快,比附加方法快了大约 50%。

深入探究原因

列表理解本质上是一种语法构造,它基于现有的可迭代生成新列表。与附加方法不同,它不需要在每次迭代时检索和调用附加属性。

代码反汇编

使用反汇编器进行更深入的分析提供见解深入了解根本差异:

# Function using appending
dis.dis(f1)

在使用附加的函数的反汇编代码中,每次迭代都有一个明显的 LOAD_METHOD 和 CALL_METHOD 对(字节码 18-22)。这些指令处理附加属性的加载和调用,这会产生开销。

# Function using list comprehension
dis.dis(f2)

相反,列表理解版本(字节码 10-12)涉及单个 CALL_FUNCTION 指令。该指令无需属性检索即可高效构造新列表。

结论

列表理解效率的提高源于其优化的实现。通过避免重复加载和调用追加属性,列表理解可以按需创建列表,从而显着提高性能,特别是在处理大型迭代时。

以上是为什么列表推导式比 Python 中添加到列表要快得多?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn