是否有任何pythonic方法可以找到数组中特定元组元素的平均值?

我想把这段代码写成pythonic.我的真实阵列比这个例子大得多.

(5 10 20 3 2)/ 5

print(np.mean(array,key=lambda x:x[1]))
TypeError: mean() got an unexpected keyword argument ‘key’

array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]

sum = 0
for i in range(len(array)):
    sum = sum + array[i][1]

average = sum / len(array)
print(average)

import numpy as np
print(np.mean(array,key=lambda x:x[1]))

怎么能避免这个?
我想用第二个例子.

我正在使用Python 3.7

解决方法:

如果您使用的是Python 3.4或更高版本,则可以使用statistics模块:

from statistics import mean

average = mean(value[1] for value in array)

或者,如果您使用的是早于3.4的Python版本:

average = sum(value[1] for value in array) / len(array)

这些解决方案都使用Python的一个很好的功能,称为生成器表达式.循环

value[1] for value in array

以及时和内存有效的方式创建新序列.见PEP 289 — Generator Expressions.

如果您正在使用Python 2,并且您正在对整数求和,我们将进行整数除法,这将截断结果,例如:

>>> 25 / 4
6

>>> 25 / float(4)
6.25

为了确保我们没有整数除法,我们可以将sum的起始值设置为浮点值0.0.但是,这也意味着我们必须使用括号使生成器表达式显式化,否则它是语法错误,并且它不那么漂亮,如注释中所述:

average = sum((value[1] for value in array), 0.0) / len(array)

最好使用math模块中的fsum,它将返回一个浮点数:

from math import fsum

average = fsum(value[1] for value in array) / len(array)
上一篇:如何在php中找到数组的平均值?


下一篇:在MySQL查询中获得水平平均值的最有效方法是什么?