平均遍历列表
我是来自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 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]
请注意,这是对整个列表的长度的平均值,而不是到目前为止平均值的数量。 例如,当它平均为-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
你的平均function:
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]