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

Python中追加元素比替换元素的执行效率更高吗?

Python中列表append与元素替换的效率对比及你的前缀和代码优化

首先纠正个小细节:你贴的代码是实现**前缀和(Running Sum)**的,不是斐波那契数列,应该是描述时的小失误~

先说说你当前代码的核心效率问题

你的代码里每次循环都调用sum(nums[:i+1]),这会让时间复杂度直接升到O(n²)——因为每次求和都要重新遍历前i+1个元素,n次循环下来整体开销会随着数组长度增长急剧变大,这才是影响效率的关键,和替换元素本身关系不大。

回到你的核心疑问:append 是否比替换元素更高效?

分两种场景看:

  • 如果列表已预先分配足够空间(比如你的代码里newnums = nums[0:]已经创建了和原数组等长的列表),直接通过索引替换元素newnums[i] = ...是O(1)的操作,没有额外内存开销,效率很高。
  • 如果列表未预先分配空间,每次append时Python会自动扩容(通常是翻倍当前容量),扩容时会有内存拷贝的开销,但这种开销是**分摊O(1)**的——也就是平均下来每次append的成本依然很低,只有在触发扩容时才会有额外消耗。

为什么别人的高效解法用append?

不是因为append本身比替换快,而是他们的写法避免了重复求和,时间复杂度是O(n)。比如常见的高效前缀和写法:

class Solution(object):
    def runningSum(self, nums):
        res = []
        current_sum = 0
        for num in nums:
            current_sum += num
            res.append(current_sum)
        return res

如果把这种逻辑改成预先分配列表再替换元素,效率几乎一致:

class Solution(object):
    def runningSum(self, nums):
        res = [0] * len(nums)
        current_sum = 0
        for i in range(len(nums)):
            current_sum += nums[i]
            res[i] = current_sum
        return res

这两个版本都是O(n)时间复杂度,单次内存操作都是O(1),实际运行效率差别极小。

总结

  • 当列表已有足够空间时,替换元素和append的单次操作效率接近,append的分摊成本也是O(1)
  • 你当前代码的效率瓶颈不在替换元素,而是重复调用sum导致的O(n²)时间复杂度
  • 不管用append还是预先分配列表替换,只要逻辑是累加当前和(而非重复求和),就能达到高效的O(n)解法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:05