为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2019-07-30 15:08:33
将列表拆分为大约相等长度的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个块。我可以简单地转置(迭代它并获取每列的第一个元素,调用第一部分,然后取第二部分并将其放入第二部分等),但这会破坏项目的顺序。
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

这是一个可以工作的:


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]]


查看完整回答
反对 回复 2019-07-30
?
12345678_0001

TA贡献1802条经验 获得超5个赞

只要你不想要任何像连续块一样愚蠢的东西:


>>> def chunkify(lst,n):

...     return [lst[i::n] for i in xrange(n)]

... 

>>> chunkify(range(13), 3)

[[0, 3, 6, 9, 12], [1, 4, 7, 10], [2, 5, 8, 11]]


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 463 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信