我有一些奇怪的數字,如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.
任何想法如何解決這個問題?
謝謝!
我有一些奇怪的數字,如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.
任何想法如何解決這個問題?
謝謝!
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-06 21:53:32
@InbarRose - ''''是地板分區的未來證明符號。在Python 2.x中,這相當於'number/length',但在Python 3.x中,'number/length'會導致浮點數。 – 2012-08-06 21:54:24
我真的應該開始擁抱未來,一直堅持在2.6永遠:) – 2012-08-06 21:56:21
這裏你去。
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]
你提的問題是非常不準確的。 '19或23.'不是「一組數字」。你的意思是包含19個不同整數的集合嗎?你可以發佈一些代碼來演示你有什麼輸入,並顯示你試過的東西。然後解釋你想要的。 – 2012-08-06 21:48:42
@POP在之前的聊天中發佈了@MarkByers。所以我明白他在問什麼。回答。 – 2012-08-06 21:49:31
@InbarRose:但問題應該清楚,以便a)其他人可以回答b)以便我們可以對答案進行投票,並且c)將來有相同問題的其他人閱讀此答案可以得到最佳答案。 – 2012-08-06 21:51:37