从其他列表python的平均值创建新列表

时间:2018-01-31 06:45:54

标签: python list math

我试图从三个数据集中找到平均线。我有这个代码块来创建一个包含其他三行平均值的新列表。

for i in range(0,len(y1)):
    sum=y1[i]+y2[i]+y3[i]
    sum=sum/3
    average.append(sum)

然而,由于某种原因,这段代码没有输出

的正确平均值
y1[i]+y2[i]+y3[i].

例如,列表y1,y2,y3的最后一个值是41.72104029,39.29410479和39.24708382。然而,这个for循环将说这三个的平均值是30.729766933333334。

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:2)

我会以不同的方式循环:

for k in zip(y1, y2, y3):
    average.append(sum(k) / 3.0) # or, float(len(k)) instead of 3.0

这并不意味着你的循环有任何问题。很可能数据不在您期望的位置。所以,我认为你的问题出在数据中 - 而不是循环中。

有关

x = [1, 2, 41.72104029]
y = [3, 6, 39.29410479]
z = [1, 8, 39.24708382]

我明白了:

[1.6666666666666667, 5.333333333333333, 40.08740963333333]

另一种变化:

average = [sum(k) / 3.0 for k in zip(x, y, z)]

答案 1 :(得分:1)

使用地图:

average = map( lambda *args: sum(args)/float(len(args)), y1, y2, y3)

这种方式适用于任何数量的变量,您可以将其包装到函数中:

def listAverages(*args):
    return map( lambda *largs: sum(largs)/float(len(largs)), *args)

这里有live example

答案 2 :(得分:-1)

找到答案。它不在循环中,而是在数据中。列表y1,y2和y3的长度不同,因此数据完全没有问题。我使用这段代码而不是修复长度,它工作正常。

fmt = 'Hi, {k1:}, this is {k2:}'
res = 'Hi, Alice, this is Bob'
print Fun(fmt,res)
>>>{'k2': 'Bob', 'k1': 'Alice'}