次のことを行うはずの関数があります。リストのリストと数値の重みのリストを取り込みます。次に、リストのリストの最下位レベルのすべての項目の加重平均を取り、重みのリストの最初の項目を使用して最初の項目のリストを重み付けし、重みのリストの 2 番目の項目を重み付けに使用します。 2番目のリストなど。これは、リスト内のアイテムの加重平均を取る関数に似ていますが、アイテムはグループ化されているため、特定の重みが各グループに適用されます。これは、同じ重さのものがたくさんある場合に便利です。コードは次のとおりです。
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
は float です。xsum に追加できないのはなぜですか? 私はlambda
何かを悪用しましたか?