2016-05-16 70 views
2

我想計算'流行'的時間。 這裏是代碼。從空列表中彈出

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

我怎樣才能從列表的開始得到彈出的時間。

回答

4

默認情況下,timeit method運行一百萬次。但是,您的列表只有10000個項目。所以當timeit運行時,第一個10000次會高興地彈出,但迭代將失敗。你可以明確設置的次數:

popz.timeit(n=10000) 

,但...這是因爲要花費的時間.pop多長時間,但你的列表的大小是不斷變化的一個真正棘手的定時情況。如果你正在尋找漸近性能,你可能會驗證.pop(0)具有O(N)的漸近性能。然而,具體的時間將很難得到,因爲您必須花費時間來創建列表以及.pop,您的列表在您計時時不斷變化。這些都不是理想的。但是我想這是與試圖時間非冪等方法的問題...

+0

謝謝!明白了! –

0

嘗試像這樣

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

謝謝,它的工作原理。 –

0

也許ü可以嘗試用兩個變量之間的不同(日期時間),你在pop之前和之後定義。

我不確定,但也許是它的方式) 但有一個錯誤,它等於第二個變量賦值(在「pop」之後)的時間。

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

那麼,我不確定在這種情況下timedelta的準確性。

+0

謝謝,也許這種情況的準確性取決於許多問題,如pc的工作量。我也不確定。 –