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的疑问将迎面而来:)