警告,这是一个有点递归;)定时功能
我回答了这个问题: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