簡體   English   中英

從其他列表python的平均值制作新列表

[英]Making new list from average values of other lists 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.729766933333334。

任何幫助表示贊賞!

我將以不同的方式執行此循環:

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)

這里有一個現場例子

找到了答案。 它不是在循環中,而是在數據中。 列表y1,y2和y3的長度不同,因此數據完全不合理。 我使用此代碼段來固定長度,並且效果很好。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM