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