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

如何高效地向非空列表重复追加同一元素n次?

向非空列表重复追加同一元素的最优方法

在Python中,创建包含n个相同元素的列表,最高效的方式是使用列表乘法,示例如下:

lst = ['s'] * 1000

但当初始列表为非空时,如何以最优方式向其重复追加同一元素n次?以下是具体分析:

常见方法对比

方法1:循环调用append

lst = [1,2,3]
for _ in range(1000):
    lst.append('s')

这种方式通过Python层面的循环逐个追加元素,每个append的均摊时间复杂度为O(1),但循环本身会带来额外的Python解释器开销,当n较大时效率较低。

方法2:extend配合列表乘法/推导式

lst = [1,2,3]
lst.extend(['s'] * 1000)

# 或使用列表推导式
# lst.extend(['s' for _ in range(1000)])

extend的底层由C实现,处理速度远快于Python循环,但缺点是会预先创建一个包含n个目标元素的临时列表,额外占用O(n)的内存空间。

更优替代方案与效率结论

不存在时间复杂度低于O(n)的方案——毕竟要新增n个元素,必然需要O(n)的时间。但可以在空间或速度上做优化:

空间最优的高效方案:itertools.repeat

使用itertools.repeat生成迭代器,避免创建临时列表,同时借助extend的C层处理效率:

import itertools

lst = [1,2,3]
lst.extend(itertools.repeat('s', 1000))

itertools.repeat返回的迭代器不会一次性生成所有元素,空间复杂度仅为O(1),而extend可以直接迭代该生成器完成扩展,速度几乎与方法2的列表乘法版本持平,适合n极大、内存敏感的场景。

效率优先级总结

  1. 追求极致速度:优先选择lst.extend(['s'] * n),虽然有临时列表的内存开销,但C层处理的速度优势明显。
  2. 追求空间最优:使用itertools.repeat配合extend,兼顾速度与内存效率。
  3. 小n场景:两种方法差异可忽略,方法1也可使用,但方法2依然略快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:21