为何列表推导式比for循环append操作更慢?实测解析
意外发现:for循环append居然比列表推导式更快?
我测试得到了和预期相反的结果:显式for循环加append操作的耗时比列表推导式更短,具体数据如下:
- for循环耗时:7.214778099999876
- 列表推导式耗时:7.4003780000002735
我原本以为重复调用append的for循环会比列表推导式慢,但实际结果刚好相反。
测试代码
代码1:for循环+append实现
import timeit mycode = ''' new_list=[] x=[1,2,3,4,5] for obj in x: if obj %2==0: new_list.append(obj) ''' print(timeit.timeit(stmt=mycode, number=10000000))
代码2:列表推导式实现
import timeit mycode = ''' x=[1,2,3,4,5] new_list=[obj for obj in x if obj %2==0] ''' print(timeit.timeit(stmt=mycode, number=10000000))
为什么会出现反常识的结果?
通常列表推导式因为是Python底层优化的字节码实现,比显式for循环+append要快,但这次测试的特殊点在于处理的列表x长度极短(仅5个元素)。
当列表长度极小时,列表推导式的初始化开销(比如语法解析、生成器框架创建等额外步骤)占比会被放大,反而盖过了它的效率优势;而显式append的循环逻辑更直接,在短列表场景下的多次重复执行中,反而能跑出略快的结果。
如果换成更长的列表(比如包含数百甚至上千个元素),你会发现列表推导式的速度优势会明显体现——此时元素处理的时间占比远远超过初始化开销,底层优化的效果就显现了。
内容的提问来源于stack exchange,提问作者Ryan Njonjo
相关产品推荐
相关产品推荐

