Python - 将列表列表中的数字均匀划分

标签 python list list-comprehension divide

如何有效地将数字均匀分布在“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/

相关文章:

java - 如何从字符串列表中获取 jsonarray

Python递归函数显示给定集合的所有子集

python - 词典列表,如何获取 : intersection based on one value and symmetric difference based on another value

python - 增加列表理解中多个 for 循环的时间

python - 比较 Pandas Dataframe 行和删除具有重叠日期的行

python - 如何在没有指针的情况下用python构建二叉搜索树?

python - 如何缩小 Django 查询集中的结果范围?

python - 随机将 float 舍入为整数

r - 数据框列表第一列到行名

Python字典逐点输出