如何有效地将数字均匀分布在“n”组中?
我想到了这个函数,但它并不能完全均匀地划分这个数字。
def DivideList(total_num, div_num):
div = int(total_num)/int(div_num)
if (div_num < total_num):
div_list = [[div*i, div*(i+1)] for i in range(div_num)]
div_list[div_num-1][1] = total_num
else:
div_list = [[i, i+1] for i in range(total_num)]
return div_list
print DivideList(100, 8)
这也可以通过列表理解来实现吗?
编辑:
示例:
DivideList(20, 4) >> [[0, 5], [5, 10], [10, 15], [15, 20]]
DivideList(14, 4) >> [[0, 4], [4, 8], [8, 11], [11, 14]]
最佳答案
示例1:
def DivideList(total_num, div_num):
div = total_num / div_num
left = total_num - div * div_num
result = []
m = 0
for i in xrange(left):
k = m
m += (div + 1)
result.append([k, m])
for i in xrange(div_num - left):
k = m
m += div
result.append([k, m])
return result
更简洁:
def DivideList(total_num, div_num):
div = total_num / div_num
left = total_num - div * div_num
result = []
for i in xrange(0, left*(div+1), div+1):
result.append([i, i+div+1])
for i in xrange(left*(div+1), total_num, div):
result.append([i, i+div])
return result
示例2: 这是一个生成器,可以生成您想要的 block :
def DivideList(total_num, div_num):
div = total_num / div_num
left = total_num - div * div_num
m = 0
for i in xrange(left):
k = m
m += (div + 1)
yield [k, m]
for i in xrange(div_num - left):
k = m
m += div
yield [k, m]
更简洁:
def DivideList(total_num, div_num):
div = total_num / div_num
left = total_num - div * div_num
for i in xrange(0, left*(div+1), div+1):
yield [i, i+div+1]
for i in xrange(left*(div+1), total_num, div):
yield [i, i+div]
关于Python - 将列表列表中的数字均匀划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395069/