从空列表中弹出

时间:2016-05-16 07:11:17

标签: python timer pop timeit

我想计算'pop'的时间。 这是代码。

x=list(range(10000))
popz=timeit.Timer("x.pop(0)","from __main__ import x")
print (popz.timeit())
IndexError: pop from empty list

如何从列表的开头获取弹出时间。

3 个答案:

答案 0 :(得分:4)

默认情况下,timeit method运行一百万次。但是,您的列表只有10000个项目。因此,当timeit运行时,第一个10000次将很乐意弹出,但10001次迭代将失败。您可以明确设置次数:

popz.timeit(n=10000)

但是......这是一个非常棘手的时间情况,因为你想要计算.pop所需的时间,但是你的列表大小会不断变化。如果您正在寻找渐近性能,您可能会验证.pop(0)是否具有O(N)的渐近性能。然而,具体的时间很难得到,因为您需要花时间创建列表所需的时间以及.pop您的列表是不断的在你计时时改变。这些都不是理想的...但我想这是试图计算非幂等方法的问题......

答案 1 :(得分:0)

试试这样

>>> import timeit
>>> x=list(range(10000))
>>> timeit.timeit("x.pop(0)","from __main__ import x", number=len(x))
0.01635134604293853

答案 2 :(得分:0)

也许你可以尝试在pop。之前和之后定义的两个变量(datetime)之间使用不同的东西。

我不确定,但也许就是这样) 但是有一个错误,它等于第二个变量赋值的时间(" pop"之后)。

import datetime
a = datetime.datetime.now()
# ...wait a while...
b = datetime.datetime.now()
print(b-a)

嗯,我不确定在这种情况下timedelta的准确性。