Python智能舍入数字

时间:2012-08-06 21:45:59

标签: python list numbers rounding

我有一些奇怪的数字,例如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。

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

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]