当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《保持百分比列表的算法加起来达到100%》经验,为你挑选了1个好方法。

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

mylist = [2.0, 7.0, 12.0, 35.0, 21.0, 23.0]  

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

fix = mylist[:3]
vari = mylist[3:]

目标是将新项添加到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)

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

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

S.Lott.. 9

这个怎么样?

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

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

 sum(v) == sum( v + [n] )

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

sum(r(i)) == -n

要么

sum( map( r, v ) ) == -n

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



1> S.Lott..:

这个怎么样?

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

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

 sum(v) == sum( v + [n] )

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

sum(r(i)) == -n

要么

sum( map( r, v ) ) == -n

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

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有