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

时间:2015-03-15 15:26:21

标签: python list average mean

我有一个清单:

    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]将改为[" cake",7]

如果对列表中的每个元素执行此操作,则结果应为:

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

怎么可以这样做?谢谢:3

3 个答案:

答案 0 :(得分: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函数,因为你想要{{1}的平均值}为cake为6.5。圆函数将为你完成工作

答案 1 :(得分:2)

你可以尝试

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

答案 2 :(得分:2)

如果您使用python 3,则可以使用2个列表推导和numpy.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]]