2012-08-06 104 views
0

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

更多的是,有些不分为5个不同的数字。有些可能类似77/12,因此被分成12个差异。列表中的每个数字为6或7,最后加到77.

任何想法如何解决这个问题?

谢谢!

+0

你提的问题是非常不准确的。 '19或23.'不是“一组数字”。你的意思是包含19个不同整数的集合吗?你可以发布一些代码来演示你有什么输入,并显示你试过的东西。然后解释你想要的。 – 2012-08-06 21:48:42

+1

@POP在之前的聊天中发布了@MarkByers。所以我明白他在问什么。回答。 – 2012-08-06 21:49:31

+2

@InbarRose:但问题应该清楚,以便a)其他人可以回答b)以便我们可以对答案进行投票,并且c)将来有相同问题的其他人阅读此答案可以得到最佳答案。 – 2012-08-06 21:51:37

回答

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 
+0

非常优雅,我从来没有见过'[数字//长度]',你能解释一下吗? – 2012-08-06 21:53:32

+1

@InbarRose - ''''是地板分区的未来证明符号。在Python 2.x中,这相当于'number/length',但在Python 3.x中,'number/length'会导致浮点数。 – 2012-08-06 21:54:24

+0

我真的应该开始拥抱未来,一直坚持在2.6永远:) – 2012-08-06 21:56:21

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]