Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PYTHON:查找嵌套列表的平均值_Python_List_Average_Mean - Fatal编程技术网

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

PYTHON:查找嵌套列表的平均值,python,list,average,mean,Python,List,Average,Mean,我有一份清单: data=[ [["apple",2]], [["cake",5],["cake",8]], [["chocolate",3],["chocolate",9],["chocolate",10]],[["grapes",6]] ] 此列表(数据)由列表(数据[x])组成,其中列表(数据[x][x])包含同一个单词,每个单词都带有一个数字。我想找到每个单词的数字平均值(任意四舍五入为整数的浮点数) 例如,列表中有2个蛋糕(数据[1]),同一列表中有数字5和8。我想要这两个数

我有一份清单:

    data=[ [["apple",2]], [["cake",5],["cake",8]], [["chocolate",3],["chocolate",9],["chocolate",10]],[["grapes",6]] ]
此列表(数据)由列表(数据[x])组成,其中列表(数据[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
函数,因为您希望
蛋糕的平均值
7
作为其6.5。round函数将为您完成任务

您可以尝试

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个列表理解和函数或函数:

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

非常感谢你(也感谢你回答了昨天的问题)。但是,我只熟悉for循环的格式:
fori in x:#code…
如果您使用“for”的方式,它是如何工作的?您在[list]
中为x、y设置了
[list]。
不客气;)如您所见,
[zip(*i)for i in data]
的结果包含两个元素的列表,因此
for i,j in
将第一个元素分配给
i
,第二个元素分配给
j
。哦,不<代码>numpy.mean在我的代码中不起作用。我导入了
numpy
,但它出现了语法错误,突出显示了
numpy.mean
numpy
红色。我该怎么办?如果
numpy.mean
不起作用,有什么替代方案?感谢您回答我的上述问题:)不,我认为问题在于python将
numpy
识别为一个模块(@mikasackerman我想这是另一个问题,你可以作为一个新问题来问它!谢谢你。
round()有什么可能的方法吗?)
函数返回例如
2
而不是
2.0
?是的,你可以使用
int
作为函数而不是
round
哈!vks,你什么时候开始回答非正则表达式的?@BhargavRao QA Automation Python:P…….仍在学习…….没有你的专业水平…….只是循环之类的东西。。。。我很少用它:P。。。。。。。。。vksingh1512@gmail.com在fb上也是通过这个id:)我对正则表达式有任何疑问,我会发邮件的directly@BhargavRao当然给我发一封测试邮件:P…………关于python的疑问将迎面而来:)