2016-05-16 5 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は100万回実行されます。しかし、あなたのリストは10000アイテムだけです。したがって、timeitが実行されると、最初の10000時間はうれしくポップしますが、10001の繰り返しは失敗します。あなたは明示的に回数を設定することができます。

popz.timeit(n=10000) 

けど...あなたは時間にしたいので、これはそれが.popにかかる時間は本当にトリッキーなタイミング状況ですが、あなたのリストのサイズは常に変化しているが。あなたが漸近的なパフォーマンスを探しているなら、おそらく.pop(0)がO(N)の漸近的な性能を持っていることを検証できます。しかし、リストの作成に要する時間を、.pop,またはと一緒に時間を計らなければならないので、具体的な時間は来るのが難しいでしょう。

+0

ありがとうございました! –

0

たぶんuが(2つの変数の間の異なる使用しようとすることができますので、

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

ありがとう、それは動作します。 –

0

のように試してみてください...これらのどちらが理想的です...しかし、私はそれが時間非冪等の方法にしようとの問題だと思います日時)を指定します。

しかし、2番目の変数代入(「ポップ」の後)の時間に等しいエラーがあります。

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

この場合、timedeltaの精度についてはわかりません。

+0

ありがとう、この場合の正確さは、pc.cの作業負荷など、多くの問題に依存している可能性があります。 –

関連する問題