繁体   English   中英

平均遍历列表

[英]Average Iterating through list

我是来自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时,结果将适用于该迭代中的所有结果。

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

您的平均功能:

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]

您不会在循环过程中的任何地方保存结果。 您只在最后返回它,这就是为什么您得到这些结果的原因:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM