簡體   English   中英

PYTHON:查找嵌套列表的平均值

[英]PYTHON: Finding the average of values of a nested list

我有一個清單:

    data=[ [["apple",2]], [["cake",5],["cake",8]], [["chocolate",3],["chocolate",9],["chocolate",10]],[["grapes",6]] ]

該列表(數據)由列表(data [x])組成,列表由包含相同單詞的列表(data [x] [x])組成,每個列表都帶有一個數字。 我想找到每個單詞的平均數(任何浮點數舍入為整數)。

例如,列表中有2個蛋糕(數據[1]),同一個列表中有數字5和8.我想要這兩個數字中的平均值,即7,因此數據[1]會改為[“蛋糕”,7]

如果對列表中的每個元素執行此操作,則結果應為:

    data=[["apple",2],["cake",7],["chocolate",7],["grapes",6]]

怎么可以這樣做? 謝謝:3

您可以在列表理解中使用zip

>>> from __future__ import division
>>> [[set(i).pop(),round(sum(j)/len(j),0)] for i,j in [zip(*i) for i in data]]
[['apple', 2.0], ['cake', 7.0], ['chocolate', 7.0], ['grapes', 6.0]]

這里的zip函數會將您的值與嵌套列表中的名稱分開:

>>> [zip(*i) for i in data]
[[('apple',), (2,)], [('cake', 'cake'), (5, 8)], [('chocolate', 'chocolate', 'chocolate'), (3, 9, 10)], [('grapes',), (6,)]]

然后你可以循環它們並計算平均值和使用set來選擇名稱集!還要注意它已經使用了round函數,因為你想要cake的平均值為7作為其6.5。圓函數將完成工作為了你

你可以試試

x=[ [["apple",2]], [["cake",5],["cake",8]], [["chocolate",3],["chocolate",9],["chocolate",10]],[["grapes",6]] ]
y=[]
for i in x:
    avg=0
    c=0
    for k in i:
        avg=k[1]+avg
        c=c+1
    avg=avg/c
    y.append([k[0],avg])
    avg=0
    c=0

print y

輸出:

[['apple', 2], ['cake', 6], ['chocolate', 7], ['grapes', 6]]

如果使用python 3,可以使用2個列表numpy.meannumpy.mean函數或statistics.mean函數來完成:

In [1]: [[x[0][0], round(np.mean([y[1] for y in x]))] for x in data]
Out[1]: [['apple', 2.0], ['cake', 7.0], ['chocolate', 7.0], ['grapes', 6.0]]

如果你沒有平均功能,你可以像這樣計算它

In [2]: tmp = ([x[0][0], [y[1] for y in x]] for x in data)
In [3]: [[x[0], round(sum(x[1])*1.0/len(x[1]))] for x in tmp]
Out[3]: [['apple', 2.0], ['cake', 7.0], ['chocolate', 7.0], ['grapes', 6.0]]

暫無
暫無

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

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