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

使用Numba向列表追加元素的最快方式是什么?

Numba下大量列表追加的最优方式

结论:优先使用list.append(value),绝对避免list1 + list2的写法

核心原因

  • list.append()是原地操作:Numba对Python列表的append操作做了专门优化,它会在现有列表的内存缓冲区后直接添加元素,仅当缓冲区不足时才会触发一次扩容(扩容策略和Python原生一致,但Numba编译代码会消除解释器层面的额外开销)。这种方式的时间复杂度为O(1)均摊。
  • list1 + list2是创建新列表:每次执行该操作,都会分配一块全新的内存空间,然后把list1和list2的所有元素完整复制到新列表中。当列表规模持续增大时,复制的元素数量越来越多,时间复杂度会变为O(n),性能会随着列表长度增长急剧下降。

实测对比示例

以下是编译后的性能测试代码,直观展示两种方式的差距:

from numba import jit
import time

@jit(nopython=True)
def append_test(n):
    lst = []
    for i in range(n):
        lst.append(i)
    return lst

@jit(nopython=True)
def concat_test(n):
    lst = []
    for i in range(n):
        lst = lst + [i]
    return lst

# 测试10万次追加操作
start = time.time()
append_test(100000)
print(f"append耗时: {time.time() - start:.4f}秒")

start = time.time()
concat_test(100000)
print(f"concat耗时: {time.time() - start:.4f}秒")

运行结果通常会显示append_test的耗时仅为concat_test的几百分之一,且列表越长,差距越显著。

额外优化提示

如果需要批量追加另一个列表的所有元素,使用list.extend(other_list)比循环调用append更高效——Numba对extend同样做了原地操作优化,能减少多次函数调用的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:04