Python-将列表分成大约相等长度的N个部分

发布于 2021-02-02 23:14:08

将列表分为大致相等的最佳方法是什么?例如,如果列表有7个元素并将其分为2部分,则我们要在一部分中获得3个元素,而另一部分应具有4个元素。

我正在寻找类似的东西even_split(L, n),打破Ln部分。

def chunks(L, n):
    """ Yield successive n-sized chunks from L.
    """
    for i in xrange(0, len(L), n):
        yield L[i:i+n]

上面的代码给出了3个块,而不是3个块。我可以简单地进行转置(对此进行迭代,并取每列的第一个元素,将其称为第一部分,然后取其第二,然后将其置于第二部分,依此类推),但这样会破坏项目的顺序。

关注者
0
被浏览
61
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    这是一个可行的方法:

    def chunkIt(seq, num):
        avg = len(seq) / float(num)
        out = []
        last = 0.0
    
        while last < len(seq):
            out.append(seq[int(last):int(last + avg)])
            last += avg
    
        return out
    

    测试:

    >>> chunkIt(range(10), 3)
    [[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]
    >>> chunkIt(range(11), 3)
    [[0, 1, 2], [3, 4, 5, 6], [7, 8, 9, 10]]
    >>> chunkIt(range(12), 3)
    [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你可以相当简单地将其编写为列表生成器:

    def split(a, n):
        k, m = divmod(len(a), n)
        return (a[i * k + min(i, m):(i + 1) * k + min(i + 1, m)] for i in xrange(n))
    

    例:

    >>> list(split(range(11), 3))
    [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看