从其他列表的平均值生成新列表

2024-04-24 13:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从三个数据集中找出一条平均线。我有这段代码来创建一个新列表,其中包含其他三行的平均值。你知道吗

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.729766933334。你知道吗

感谢您的帮助!你知道吗


Tags: 数据代码in列表forlenrange平均值
3条回答

找到了答案。它不在循环中,而是在数据中。列表y1、y2和y3的长度不同,因此数据都不正常。我用这段代码来修正长度,效果很好。你知道吗

y1 = y1[len(y1)-232:]
y2 = y2[len(y2)-232:]
y3 = y3[len(y3)-232:]

我会做不同的循环:

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)]

使用地图:

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

相关问题 更多 >