[英]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.