警告,這是一個有點遞歸;)定時功能
我回答了這個問題:Python:How can i get all the elements in a list before the longest element?
我提交那裏有另一種答案,應該是更快的(筆者認爲後,所以沒有我) 。我嘗試瞭解不同的解決方案,但應該更慢的解決方案實際上更快。這讓我覺得我的代碼有問題。或者是?
import string
import random
import time
def solution1(lst):
return lst[:lst.index(max(lst, key=len))]
def solution2(lst):
idx, maxLenStr = max(enumerate(lst), key=lambda x:len(x[1]))
return lst[:idx]
# Create a 100000 elements long list that contains
# random data and random element length
lst = []
for i in range(100000):
s = "".join([random.choice(string.letters+string.digits) for x in range(1, random.randint(1,50))])
lst.append(s)
# Time the first solution
start = time.time()
solution1(lst)
print 'Time for solution1', (time.time() - start)
# Time the second solution
start = time.time()
solution2(lst)
print 'Time for solution2', (time.time() - start)
更新
之前有人提到爲什麼我把這個作爲一個新的問題。這個問題更多的是關於我學習如何測量執行時間...
這兩個函數不返回同一類型的對象 – joaquin 2012-01-05 12:06:11
衛生署的!當然:)謝謝! – 2012-01-05 12:07:39
修正了它。但是,這甚至讓我的代碼更快......而且我仍然認爲solution2應該更快.. – 2012-01-05 12:09:24