我有一个应该执行以下操作的函数:获取列表列表和数字权重列表。然后,取列表列表中每个底层项的加权平均值,权重列表中的第一项用于加权第一个事物列表,权重列表中的第二项用于加权第二个列表,等等。它就像一个函数,只取列表中项目的加权平均值,但项目被分组,以便将特定权重应用于每个组。如果很多东西的重量相同,这很有用。这是代码:
def getAverage(x,wts=[0.1,0.3,0.6]):
"""Get weighted average of partitioned list."""
xsum = 0
i = 0
for item in x:
xsum += reduce(lambda x,y:x+y,item)*wts[i]
i += 1
return xsum/reduce(lambda x,y:x+y,wts)
但是,当我尝试编译时,该行出现以下错误:
TypeError: unsupported operand type(s) for +=: 'int' and 'list'
什么?为什么?为什么这个乘法会返回一个列表?这是没有意义的。reduce()
返回一个数字(准确地说是整数),其中的元素wts
是浮点数。怎么不允许加到xsum?是我用错lambda
了还是怎么的?