具有上限的int列表的重新分发



我有几个数字像分数的一部分:

  • 10分
  • 5分
  • 20分
  • 30分
  • 25分
  • 10分

my_list=[10,5,20,30,25,10]

我的积分总和是100-这是最大

我想把它规范化,因为我知道总数不应该超过100。我该怎么做?因此,如果我再加上一个得分为10的元素,从其余的元素中减去一个数字,使总和变成100…

就像我在游戏中移动滑块,同时拥有我的英雄IDK 的最大参数点集一样

这个过程有库吗?也许在numpy|sklearn?

您可以编写一个自定义函数来实现这一点——不需要大量依赖项。请注意,这将返回一个列表;可以通过创建一个类来进一步改进这一点:

def generate_list_with_normalization(input_list, element_to_add, cap=100):
total = sum(input_list) + element_to_add

if total <= cap:
return input_list + [element_to_add]
return [elem * cap / total for elem in input_list + [element_to_add]]
my_list = [10, 5, 20, 30, 25, 10]
result = generate_list_with_normalization(my_list, 10, 100)
print(result)
print(sum(result))

该输出:

[9.090909090909092, 4.545454545454546, 18.181818181818183,
27.272727272727273, 22.727272727272727, 9.090909090909092, 9.090909090909092]
100.0

您可以使用:

my_list = [10, 5, 20, 30, 25, 10]
add = 10
sub = (100-sum(my_list)-add)/len(my_list)
new_list = [x+sub for x in my_list]+[add]
# [8.33, 3.33, 18.33, 28.33, 23.33, 8.33, 10]
sum(new_list)
# 100

最新更新