将列表分成 大致 相等的部分的最佳方法是什么?例如,如果列表有 7 个元素并将其拆分为 2 个部分,我们希望在一个部分中获取 3 个元素,而另一个应该有 4 个元素。
我正在寻找类似的东西even_split(L, n)分成L几n部分。
even_split(L, n)
L
n
def chunks(L, n): """ Yield successive n-sized chunks from L. """ for i in range(0, len(L), n): yield L[i:i+n]
上面的代码给出了 3 个块,而不是 3 个块。我可以简单地转置(迭代它并获取每列的第一个元素,调用该部分,然后获取第二个并将其放入第二部分,等等),但这会破坏项目的顺序。
由于舍入错误,此代码已损坏。 不要使用它!!!
assert len(chunkIt([1,2,3], 10)) == 10 # fails
这是一个可行的方法:
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]]