Python 中的列表加权总和未达到预期值

Weighting a list in Python does not sum to the intended value

我想采用 List3 的元素来描述一年中每个月可用的生产天数,并将其与 List1 中的年产量一起加权以完成每月生产量。我的代码是:

List3 = [31,28,31,30,31,30,31,31,19,31,30,31]
List = [5150]

for i in xrange(len(List3)):
    j = List3[i]
    g = g+j

for i in xrange(len(List)):
    a = List[i]/g
    for j in xrange(len(List3)):
        print (a*List3[j])

其中 a 描述了每天 的产量 ,因此将其乘以每个月的 List3[j] 的元素应该提供总数月产量。

但是,运行这个程序的月产量是:

434 392 434 420 434 420 434 434 266 434 420 434

总和为 4956。但 List3 的年产量为 5150 台。因此,年产量与月产量总和之间存在 154 个单位的差异。

有人能看出我哪里做错了吗?我记得我之前重写过这段代码,使月产量的总和最多与年产量相差大约10个单位,这就足够了。但是我不记得我是怎么做的。

此致,

这是四舍五入造成的。在Python2中,这一行是整数除法:

a = List[i]/g

下面是一个简单的实验性工作流程,使用交互式解释器来说明这个问题:

>>> l3 = [31,28,31,30,31,30,31,31,19,31,30,31]
>>> l = [5150]
>>> g = sum(l3)
>>> g
354
>>> a = l[0] / g
>>> a
14
>>> sum(a*e for e in l3)
4956
>>> a = l[0] / float(g)
>>> a
14.548022598870057
>>> sum(a*e for e in l3)
5149.999999999999