2017-03-01 20 views
0
import time 
s = time.time() 
def insertionSort(alist): 
    for index in range(1, len(alist)): 

     currentvalue = alist[index] 
     position = index 

     while position > 0 and alist[position - 1] > currentvalue: 
      alist[position] = alist[position - 1] 
      position = position - 1 

     alist[position] = currentvalue 
alist = [54,26,93,17,77,31,44,55,20] 
insertionSort(alist) 
print (time.time() - s) # Result 0.0 

我查找時間模塊,但很難作爲新手閱讀它。我已經在尋找答案,它會測量代碼的開始和代碼的結束。結果是0.0。請幫我解決一下這個。在python中測量代碼時間。我錯了什麼?

+1

它結束得太快登記;嘗試多次運行排序(確保在循環內初始化數組*)。另外,使用['time.perf_counter()'](https://docs.python.org/3/library/time.html#time.perf_counter)來衡量性能。 (或[timeit](https://docs.python.org/3/library/timeit.html)。) – Ryan

+0

你期望什麼? – DyZ

回答

1

您如何使用time.time沒有任何問題。

打印0.0的原因是代碼跑得太快以至於定時器根本沒有改變。

爲了說明我的觀點,我已經循環了1000次代碼。

import time 
s = time.time() 
def insertionSort(alist): 
    for index in range(1, len(alist)): 

     currentvalue = alist[index] 
     position = index 

     while position > 0 and alist[position - 1] > currentvalue: 
      alist[position] = alist[position - 1] 
      position = position - 1 

     alist[position] = currentvalue 
for x in xrange(1000): 
    insertionSort([54,26,93,17,77,31,44,55,20]) 
e = time.time() 
print (e - s) 

輸出:

0.00600004196167 

有一個bulti,在庫調用timeit這是這種情況,如果你有興趣的代碼性能非常有用。

import timeit 
t = timeit.Timer("insertionSort([54,26,93,17,77,31,44,55,20])", "from __main__ import insertionSort") 
time = t.timeit(1000) 
print(time) 

輸出:

0.00587430725292 
+0

Yesss!非常感謝亞歷克斯! –

相關問題