You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python列表切片比基础算术运算慢100倍?

为什么列表切片计算长度的性能比算术运算差这么多?

我实现了first_valid_position函数,用二分查找获取列表中目标值的首次出现位置,这个函数被totalValid调用。下面是两种性能差异极大的实现代码:

def totalValid(list1: list[int], list2: list[int], success: int) -> list[int]:
    list2.sort()
    solution = []
    
    for x in list1:
        solution.append(len(list2) - first_valid_position(list2, success, x)) #option 1
        solution.append(len(list2[first_valid_position(list2, success, x):])) #option 2
    return solution

这两段代码都是计算排序后的list2里,目标索引之后的元素数量(对应list1的每个元素),结果完全等价,但方案2用切片再取长度耗时约13秒,方案1只用算术运算仅耗时0.13秒(测试用的两个列表都包含10万条数据)。


性能差距的核心原因

  • 切片会创建全新列表:执行list2[start:]时,Python会在内存中复制原列表从start索引到末尾的所有元素,生成一个完整的新列表。对于10万条数据的列表,每次切片都要完成数万甚至近10万条元素的拷贝,内存分配和数据复制的开销极大。
  • 算术运算无额外开销:len(list2) - index只是简单的整数减法运算,不需要任何内存操作,纯CPU层面的基础计算,耗时几乎可以忽略。

隐性的额外开销

哪怕你只是用切片来获取长度,Python也会先完整创建出这个切片列表——因为切片操作本身的返回值就是新列表,len()只是读取这个新列表的属性,但创建新列表的成本已经产生了。在循环10万次的场景下,这种重复的拷贝操作会把时间成本放大到极致,最终导致两者性能差距达到两个数量级。

内容的提问来源于stack exchange,提问作者user3491700

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:48:18