2016-05-16 2 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

Может быть и можно попытаться использовать различные между двумя переменными (datetime), которые вы определяете до и после pop.

Я не уверен, но возможно его путь) Но есть ошибка, которая равна времени второго присвоения переменной (после «pop»).

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

Ну, и я не уверен в точности timedelta в этом случае.

+0

Спасибо, может быть, точность этого случая зависит от многих проблем, таких как рабочая нагрузка pc.I'm тоже не уверен. –

Смежные вопросы