平均迭代列表

时间:2015-06-29 16:02:20

标签: python excel

我是来自excel的Python的新手。我想要一个列表的平均值,但是每个新项目。列表:

x = [-3.2, 2.7, -8.5, -1.4]

我试过了:

avg = sum(col)/len(col)

这给出了-2.6的结果,这是整个列除以整数。我希望它能在每次迭代时返回平均值。我试过使用for循环:

def avg2(x):
    ttl = 0
    for i in x:
        ttl += i
        res = ttl / len(x)
    return res

相同的结果,整数和整列。它遍历整个列表,而不是每个值的总计。作为参考,excel公式将是(对于A列中的数字):

=AVERAGE(A$1:A4)

将公式向下拖动到A5时,结果将用于该次迭代的所有内容。

也许在循环中使用枚举或循环?

2 个答案:

答案 0 :(得分:2)

你的平均功能:

def avg(lst): return sum(lst)/len(lst)

基本上,您希望将avg()应用于x的切片。为了清楚起见,x的切片是:

>>> x[:1]
[-3.2]
>>> x[:2]
[-3.2, 2.7]
>>> x[:3]
[-3.2, 2.7, -8.5]

使用列表推导将其应用于x的切片:

>>> [avg(x[:i]) for i in range(1,len(x)+1)]
[-3.2, -0.25, -3.0, -2.6]

答案 1 :(得分:0)

您在循环过程中未将结果保存在任何位置。你只是在最后归还它,这就是你获得这些结果的原因:

def avg2(x):
    res = []
    total = 0
    for i in x:
        total += i
        res.append(total / len(x))
    return res

将导致:

>>> x = [-3.2, 2.7, -8.5, -1.4]
>>> avg2(x)
[-0.8, -0.125, -2.25, -2.6]

请注意,这会在整个列表的长度上平均total,而不是到目前为止已经平均的值的数量。例如,当它-0.125平均时,它-0.925 / 4而不是-0.925/ 2。要实现这一点,您可以使用enumerate及其可选的start参数来避免除以0:

def avg2(x):
    res = []
    total = 0
    for idx, i in enumerate(x, 1):
        total += i
        res.append(total / idx)
    return res