【发布时间】:2018-08-01 18:50:06
【问题描述】:
给定一个整数和 bin 的数量,如何将整数分成尽可能相等的部分?
例如输出的总和应该等于输入的整数
[in]: x = 20 , num_bins = 3
[out]: (7, 7, 6)
另一个例子
[in]: x = 20 , num_bins = 6
[out]: (4, 4, 3, 3, 3, 3)
我试过了:
x = 20
num_bins = 3
y = [int(x/num_bins)] * num_bins
for i in range(x%num_bins):
y[i] += 1
它有效,但必须有更简单/更好的方法,也许使用bisect 或numpy?
使用来自 https://stackoverflow.com/a/48899071/610569 的 numpy ,我也可以这样做:
list(map(len, np.array_split(range(x), num_bins)))
但这与创建生成以获取假冒列表并获取长度有点复杂。
【问题讨论】:
-
num_bins = 6的例子应该是5。 -
哎呀错字! ;P
-
顺便说一句,你的算法看起来对我来说已经足够好了。我没有任何意见。