平均遍历列表

我是来自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]