python平均列表

时间:2016-03-10 07:43:31

标签: python python-2.7

示例:列表

Map<String, List<? extends Model>>

我想要一个平均值列表,其中元素数量越来越多,即

x = [1, 5, 3, 6, 12, 55, 68, 24,]

y中的第一个元素是前两个元素的平均值,接下来是前3个元素的平均值,接下来是前4个元素的平均值。 实际列表包含数千个元素。现在通过切片和总和/长度来做。但这需要很长时间。

2 个答案:

答案 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)

数学归纳产生一种算法:

  1. i == 0x[0:0] == 0.0
  2. 的平均值
  3. 代表i == 1x[0:1] == x[0]
  4. 的平均值
  5. 最后,对于i > 1x[0:i]的平均值为(x[0:i - 1] + x[i]) / float(i)
  6. 现在我们有一个增量算法来生成累积平均值

    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))
    
相关问题