代码之家  ›  专栏  ›  技术社区  ›  chiuki

具有上限的int列表的再分配

  •  0
  • chiuki  · 技术社区  · 2 年前

    我有几个数字,比如分数的一部分:

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

    我的清单=[10,5,20,30,25,10]

    我的总分是100分——是的 最大限度

    我想让它正常化,知道总数不应该超过100。我该怎么做? 所以如果我再加一个分数为10的元素,从剩下的元素中减去一个数字,这样总和就变成了100。。。

    就像我在游戏中移动滑块,同时为我的英雄IDK设置最大的参数点

    是否有用于此过程的库?在numpy | sklearn也许?

    0 回复  |  直到 2 年前
        1
  •  1
  •   BrokenBenchmark    2 年前

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

    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
    
        2
  •  1
  •   mozway    2 年前

    你可以使用:

    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