2012-08-06 101 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]