gpt4 book ai didi

python - 计时功能

转载 作者:太空狗 更新时间:2023-10-30 00:51:50 28 4
gpt4 key购买 nike

警告,这有点递归;)

我回答了这个问题: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)

更新

在任何人提到为什么我把它作为一个新问题之前。问题更多是关于我学习如何衡量执行时间......

最佳答案

在第二种解决方案中,lambda 的成本更高。

我同时分析了代码和分析数据,看起来,第一个解决方案更快

作为wiki会说函数调用代价高昂,在第二种解决方案中,lambda 和 len 函数调用使其运行速度变慢

请注意,我已将列表的长度缩减为 1000 个元素

>>> cProfile.run('solution1(lst)')
5 function calls in 0.000 CPU seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <pyshell#305>:1(solution1)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {max}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {method 'index' of 'list' objects}


>>> cProfile.run('solution2(lst)')
2004 function calls in 0.012 CPU seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.012 0.012 <pyshell#306>:1(solution2)
1000 0.006 0.000 0.009 0.000 <pyshell#306>:2(<lambda>)
1 0.000 0.000 0.012 0.012 <string>:1(<module>)
1000 0.003 0.000 0.003 0.000 {len}
1 0.003 0.003 0.012 0.012 {max}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

关于python - 计时功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com