示例:列表
Map<String, List<? extends Model>>
我想要一个平均值列表,其中元素数量越来越多,即
x = [1, 5, 3, 6, 12, 55, 68, 24,]
y中的第一个元素是前两个元素的平均值,接下来是前3个元素的平均值,接下来是前4个元素的平均值。 实际列表包含数千个元素。现在通过切片和总和/长度来做。但这需要很长时间。
答案 0 :(得分:4)
O(n)解决方案就像这样
>>>x=[1,2,3,4,5,6,7,8]
>>> ss=x[0]
>>> y=[]
>>> for ind,j in enumerate(x[1:]):
... ss+=j
... y.append(ss*1.0/(ind+2))
...
>>> y
[1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5]
答案 1 :(得分:2)
数学归纳产生一种算法:
i == 0
,x[0:0] == 0.0
,i == 1
,x[0:1] == x[0]
。i > 1
,x[0:i]
的平均值为(x[0:i - 1] + x[i]) / float(i)
。现在我们有一个增量算法来生成累积平均值:
x = [1, 5, 3, 6, 12, 55, 68, 24,]
def acc_avg(seq):
acc_sum = 0.0
for pos, item in enumerate(seq):
acc_sum += item
# don't forget the float(), otherwise we might be
# running integer division.
yield acc_sum / float(pos + 1)
for z in y:
# this calculates the averages on the fly
print z
# if we need a list, make one from the generator
y = list(acc_avg(x))