猿问

将列表拆分为大约相等长度的N个部分

将列表拆分为大约相等长度的N个部分

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

我正在寻找像even_split(L, n)这样的东西L分成n几部分。

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个块。我可以简单地转置(迭代它并获取每列的第一个元素,调用第一部分,然后取第二部分并将其放入第二部分等),但这会破坏项目的顺序。


UYOU
浏览 464回答 3
3回答

芜湖不芜

这是一个可以工作的:def chunkIt(seq, num):&nbsp; &nbsp; avg = len(seq) / float(num)&nbsp; &nbsp; out = []&nbsp; &nbsp; last = 0.0&nbsp; &nbsp; while last < len(seq):&nbsp; &nbsp; &nbsp; &nbsp; out.append(seq[int(last):int(last + avg)])&nbsp; &nbsp; &nbsp; &nbsp; last += avg&nbsp; &nbsp; 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]]

12345678_0001

只要你不想要任何像连续块一样愚蠢的东西:>>> def chunkify(lst,n):...&nbsp; &nbsp; &nbsp;return [lst[i::n] for i in xrange(n)]...&nbsp;>>> chunkify(range(13), 3)[[0, 3, 6, 9, 12], [1, 4, 7, 10], [2, 5, 8, 11]]
随时随地看视频慕课网APP

相关分类

Python
我要回答