-1

我有一些奇怪的数字,例如19 or 23.这两个需要分成5 lists,这样 5 个列表的总和将为 19。换句话说,每个列表中的 3.8 为 19/5 = 3.8。但是问题是我不能有小数,我想要四舍五入的数字。有什么办法可以相应地对数字进行四舍五入,将 4、4、3、4、4 放入列表中,而不是 3.8 五次?

更重要的是,有些没有分成 5 个不同的数字。有些可能类似于 77/12,因此被分成 12 个差异。每个列表中的数字为 6 或 7,最终加起来为 77。

知道如何解决这个问题吗?

谢谢!

4

2 回答 2

8
def split(number, length):
    div, mod = divmod(number, length)
    return [div+1]*mod + [div]*(length-mod)

>>> split(19, 5)
[4, 4, 4, 4, 3]
>>> split(23, 4)
[6, 6, 6, 5]

原始版本:

def split(number, length):
    result = [number//length]*length
    for i in range(number%length):
        result[i] += 1
    return result
于 2012-08-06T21:50:54.253 回答
0

干得好。

def roundto(number,items):
    start = [1 for i in xrange(items)]
    reached = False
    while not reached:
        for i in xrange(len(start)):
            start[i] += 1
            if sum(start) == number:
                return start

print roundto(19,5)
>>> 
[4, 4, 4, 4, 3]
于 2012-08-06T21:46:51.123 回答