保持百分比列表的算法加起来达到100%

Tit*_*usz 4 python algorithm

(代码示例是python)
让我们假设我们有一个加起来为100的百分比列表:

mylist = [2.0, 7.0, 12.0, 35.0, 21.0, 23.0]  
Run Code Online (Sandbox Code Playgroud)

某些mylist值可能会更改,其他值必须保持固定.
让我们假设前3(2.0,7.0,12.0)必须保持固定,最后3(35.0,21.0,23.0)可能会改变.

fix = mylist[:3]
vari = mylist[3:]
Run Code Online (Sandbox Code Playgroud)

目标是将新项添加到mylist,而sum(mylist)保持100.0并且vari
项保持它们之间的关系.为此,我们需要
从每个变量项中减去一个PERCENTAGE.示例:假设我们要将4.0添加到mylist.
使用丑陋的aproximation循环我发现我需要减去ca.
每个变量项目的5.0634%(CERTAIN PERCENTAGE = 5.0634):

adjusted =[]
for number in vari:
    adjusted.append(number-(number*(5.0634/100.0)))
adjusted.extend(fix)
adjusted.append(4.0)
Run Code Online (Sandbox Code Playgroud)

现在调整包含我想要的结果.

我的问题是如何计算某些百分比;.)

S.L*_*ott 9

这个怎么样?

def adjustAppend( v, n ):
    weight= -n/sum(v)
    return [ i+i*weight for i in v ] + [n]
Run Code Online (Sandbox Code Playgroud)

给定一个数字列表v,附加一个新数字,n.对现有数字进行加权以保持总和相同.

 sum(v) == sum( v + [n] )
Run Code Online (Sandbox Code Playgroud)

v,i的每个元素必须通过i,r(i)的某种函数来减少

sum(r(i)) == -n
Run Code Online (Sandbox Code Playgroud)

要么

sum( map( r, v ) ) == -n
Run Code Online (Sandbox Code Playgroud)

因此,加权函数是 -(n*i)/sum(v)