代码之家  ›  专栏  ›  技术社区  ›  Idan Hazan

转换总和为1的列表并保持值之间的关系[重复]

  •  -1
  • Idan Hazan  · 技术社区  · 1 年前

    假设存在 list[int] 像这样:

    [0, 2, 3, 3, 0, 9]
    

    我想将其转换为 list[float] 和为1,并保持值之间的关系:

    [a, b, c, d, e, f]
    
    # a = e = 0
    # c = d
    # f = 4.5b = 3c = 3d
    # a + b + c + d + e + f = 1
    
    [0.0, x, 1.5x, 1.5x, 0.0, 4.5x]
    

    我想在一些模块中有一个内置函数可以做到这一点,比如 math statistics ,不确定它叫什么。

    1 回复  |  直到 1 年前
        1
  •  2
  •   Sash Sinha    1 年前

    不确定是否存在内置函数,但也许你可以使用列表理解:

    >>> input_list = [0, 2, 3, 3, 0, 9]
    >>> total = sum(input_list)
    >>> [x / total for x in input_list]
    [0.0, 0.11764705882352941, 0.17647058823529413, 0.17647058823529413, 0.0, 0.5294117647058824]
    

    我以为你可以用海象接线员( := )在一行中完成 [x / (total := sum(input_list)) for x in input_list] 并且只计算 sum(input_list) 有一次,但显然情况并非如此。