【发布时间】:2015-03-29 21:35:16
【问题描述】:
我构建了一个小测试,看看 pop、del 和 remove 之间的运行时是否存在差异。我预计 remove 和 pop/del 之间会有所不同,因为 remove 搜索值并将其删除,然后 pop/del 删除索引。
测试:
import time
list1 = []
list2 = []
list3 = []
for num in xrange(100000):
list1.append(num)
list2.append(num)
list3.append(num)
print len(list1)
ticks = time.time()
for num in xrange(100000):
list1.pop()
print "list 1 is over", list1
print time.time() - ticks
print "------------------------------------------"
print len(list2)
ticks = time.time()
for num in xrange(99999, -1, -1):
del list2[num]
print "list 2 is over", list2
print time.time() - ticks
print "------------------------------------------"
print len(list3)
ticks = time.time()
for num in xrange(0,100000):
list3.remove(num)
print "list 3 is over", list3
print time.time() - ticks
结果是:
100000
list 1 is over []
0.0269999504089
------------------------------------------
100000
list 2 is over []
0.0169999599457
------------------------------------------
100000
list 3 is over []
2.55900001526
如您所见,remove 比预期的要差得多(如预期的那样),但 pop 比 del 慢约 50%-60%(取决于运行)。
这是为什么呢? (我尝试搜索它(我猜它是实现),但找不到原因。可能原因是我如何编写它?)
【问题讨论】:
-
pop() 返回元素,而 del 只是将其删除...可能解释其中的区别吗?
-
@mguijarr 我不知道是不是这样。我扔了元素(不要保存它,以免在循环中浪费时间)所以弹出操作(在我的测试中)就像删除一样。
-
del 是一个语句,pop 是一个方法,就像 remove 一样
-
你的计时方法也有点可疑,如果要准确计时码那就用timeit模块
-
@PadraicCunningham 我不知道。谢谢,我会检查那个模块。