这看起来很简单,但我无法弄清楚.我有十个类别和分数分配给他们每个人.在中间步骤中,我将结果存储为["得分",重复]对,如:
[20,3]
[40,7]
[50,2]
Run Code Online (Sandbox Code Playgroud)
...
我最终要做的是将这些对扩展为重复的数字,然后合并和平均得到一个这样的分数:
[20,20,20]
[40,40,40,40,40,40,40]
[50,50]
Run Code Online (Sandbox Code Playgroud)
合并:
[20,20,20,40,40,40,40,40,40,40,50,50]
sum([20,20,20,40,40,40,40,40,40,40,50,50],0.0)/12
Run Code Online (Sandbox Code Playgroud)
最终结果(平均):37
那么我该如何完成第2步,在那里我将每对的分数扩展X倍?如果它们是字符串,我可以这样做,但必须有一种数字方式来做到这一点.
你可以这样做:
>>> a = [20,3]
>>> [a[0]] * a[1]
[20, 20, 20]
Run Code Online (Sandbox Code Playgroud)
但是,这一步并非真的有必要.要获得加权平均值,您可以将这些值乘以权重,将它们相加,然后除以权重之和,例如:
float(20*3 + 40*7 + 50*2) / (3 + 7 + 2)
Run Code Online (Sandbox Code Playgroud)
转换为float是为了避免Python 2中的整数除法.
它可以写成这样:
>>> xs = [[20,3], [40,7], [50,2]]
>>> float(sum(x[0] * x[1] for x in xs)) / sum(x[1] for x in xs)
36.666666666666664
Run Code Online (Sandbox Code Playgroud)