我有一個應該做以下的功能:取一個列表的列表,以及數字權重列表。然後,採用列表中每個底層項目的加權平均值,權重列表中的第一個項目用於加權第一個列表中的項目,權重列表中的第二個項目用於加權第二個列表等等。它就像一個函數,它簡單地取得列表中項目的加權平均值,但項目被分組,以便將特定權重應用於每個組。如果很多東西具有相同的重量,這很有用。下面是代碼:減少()似乎並不返回一個數字,否則的.index()無法正常工作像它應該
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
還是什麼?
您需要顯示'x'的內容。它看起來也許'x'是列表的列表。 – BrenBarn
'x' *是列表的列表。這是該功能的目的。那就是:'[90,97,75,92],[88,40,94],[75,90]' – mszegedy
你對我的代碼工作正常,返回'3.3'就此致電:'getAverage( [[1,2,3],[2,3,4]])' –