Python 从空列表中弹出

Python 从空列表中弹出,python,timer,timeit,Python,Timer,Timeit,我想计算一下“砰”的时间。 这是代码 x=list(range(10000)) popz=timeit.Timer("x.pop(0)","from __main__ import x") print (popz.timeit()) IndexError: pop from empty list 如何从列表的开头获取pop的时间。默认情况下,运行次数为一百万次。但是,您的列表只有10000个项目。因此,当timeit运行时,第一次10000将愉快地弹出,但10001迭代将失败。您可以显式设置次

我想计算一下“砰”的时间。 这是代码

x=list(range(10000))
popz=timeit.Timer("x.pop(0)","from __main__ import x")
print (popz.timeit())
IndexError: pop from empty list
如何从列表的开头获取pop的时间。

默认情况下,运行次数为一百万次。但是,您的列表只有10000个项目。因此,当
timeit
运行时,第一次
10000
将愉快地弹出,但
10001
迭代将失败。您可以显式设置次数:

popz.timeit(n=10000)
但是。。。这是一个非常棘手的计时情况,因为您需要计时
.pop
所需的时间,但列表的大小不断变化。如果您正在寻找渐近性能,您可能可以验证
.pop(0)
的渐近性能为O(N)。然而,具体的时间将很难到来,因为您要么必须计算创建列表所需的时间以及
.pop
,要么您的列表在计时时不断变化。这两个都不理想。。。但我想这就是尝试计时非幂等方法的问题…

尝试这样做

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

也许你可以尝试在你定义的两个变量(日期时间)之间使用不同的pop

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


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

谢谢,也许这种情况的准确性取决于许多问题,例如pc的工作量。我也不确定。
import datetime
a = datetime.datetime.now()
# ...wait a while...
b = datetime.datetime.now()
print(b-a)