我正在尝试加速我的部分代码,其中涉及循环和设置一个大型2D数组中的值。其中一个建议是,我尝试预先分配数组,而不是使用.append(),但有人指出,在Python中.append()是一个摊余的O(1)操作。在
但是,当我使用以下代码进行测试时:
import time
x = list()
z = list()
t1 = time.time()
for i in range(10000):
z.append([])
for j in range(10000):
z[i].append(0)
t1 = time.time()
for i in range(10000):
x.append([])
for j in range(10000):
x[i].append(1)
print(time.time()-t1)
t1 = time.time()
for i in range(10000):
for j in range(10000):
z[i][j] = 1
print(time.time()-t1)
我认为预先分配的数组比未预先分配的数组少3-4秒(大约17秒,而不是21秒)。这段代码中是什么导致基于.append()的函数比替换预先分配的数组中的值花费更长的时间?在
考虑以下因素:
与之相比:
^{pr2}$你处理事情的方式会有很大的不同。在
.append()会导致python分配更多内存,这需要时间。通过使用按分配的结构,可以节省执行所有单独分配的时间。在
相关问题 更多 >
编程相关推荐