在python中预分配数组还是使用arr.append()更好?

2024-09-27 04:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在可读性和性能方面,我应该使用[None]*n为数组预先分配内存吗?分配一个空的[]并反复使用.append()是否被认为是浪费


Tags: none浪费数组性能可读性append分配内存
1条回答
网友
1楼 · 发布于 2024-09-27 04:21:23

在这个简单的计时测试中,[None] * n的使用似乎确实要稍微快一点,但可以说不足以证明采用这种方法优于更常见的习惯用法

import time

def func1(size):
    a = [None] * size
    for i in range(size):
        a[i] = i

def func2(size):
    a = []
    for i in range(size):
        a.append(i)

def func3(size):
    a = [i for i in range(size)]

    
size = 1000000
repeat = 100
    
t0 = time.time()

for _ in range(repeat):
    func1(size)
t1 = time.time()

for _ in range(repeat):
    func2(size)
t2 = time.time()

for _ in range(repeat):
    func2(size)
t3 = time.time()

print(t1 - t0, t2 - t1, t3 - t2)

结果:

  • [None * size]然后索引:4.82秒
  • ^循环中的{}:6.37秒
  • 列表理解:6.34秒

size=1000repeat=100000重复测试会得到类似的结果:

  • [None * size]然后索引:3.16秒
  • ^循环中的{}:4.88秒
  • 列表理解:4.84秒

还有{}和{}:

  • [None * size]然后索引:6.09秒
  • ^循环中的{}:7.65秒
  • 列表理解:7.66秒

相关问题 更多 >

    热门问题