将元组扩展为在列表中重复X次的数字(python)

Che*_*nks 2 python

这看起来很简单,但我无法弄清楚.我有十个类别和分数分配给他们每个人.在中间步骤中,我将结果存储为["得分",重复]对,如:

[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倍?如果它们是字符串,我可以这样做,但必须有一种数字方式来做到这一点.

int*_*jay 8

你可以这样做:

>>> 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)