【发布时间】:2018-11-18 08:48:49
【问题描述】:
我正在尝试解决算法问题,请考虑以下列表:
l = [100, 20, 50, 70, 45]
在这个问题中,我必须找到索引 i 之前的元素的平均值:
i = 0
100
i = 1
(100 + 20) //2 = 60
i = 2
(100+20+50) // 3 = 56
...
最终结果应该存储在一个列表中:
[100, 60, 56, 60, 57]
这是我目前的代码:
from functools import reduce
def meanScores(l):
def av(x):
return reduce(lambda a, b: a+b,x)//len(x)
return [av(l[:i]) for i in range(1,len(l)+1)]
它工作正常问题是当我提交它时,我遇到了时间限制执行。我认为问题是for循环,因为len(l)超过一万时需要很多时间。以前我使用sum() 进行平均,但这也花费了很多时间,当我将sum() 转换为reduce(lambda a, b: a+b,x)//len(x) 时,算法变得更快(它解决了更多的测试用例)。我认为 if 而不是 for循环我使用另一个函数(如lambda)然后问题就解决了。那么你认为有办法吗?谢谢你的时间。
【问题讨论】:
-
您是否反复调用 meanScores?还是每次都用一次?
-
此代码可能更适合codereview
-
@OrDinari 它是一次性使用
-
@Torxed 感谢您提到这一点,我是这个网站的新手。
-
你的老师提到过avg()和数组切片吗?
标签: python algorithm execution-time