【发布时间】:2017-12-27 06:43:55
【问题描述】:
为什么是这个代码
res = []
for i in range(10000):
res[0:0] = [i]
比这段代码快十倍?
res = []
for i in range(10000):
res = [i] + res
我预计两者都必须移动所有现有列表元素以将新整数置于零索引处。随着范围的改变,两者确实看起来确实是 O(n^2),但是切片分配比相加要快得多,这意味着后者的基本操作大约是 10 倍。
(是的,两者都无法达到这个结果,最好使用deque或append然后反转结果)
【问题讨论】:
-
FWIW,你也可以
res.insert(0, i)。这应该几乎和切片分配一样快。