我想把这段代码写成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)
from math import fsum
average = fsum(value[1] for value in array) / len(array)