As part of my implementation of cross-validation, I find myself needing to split a list into chunks of roughly equal size.
import random
def chunk(xs, n):
ys = list(xs)
random.shuffle(ys)
ylen = len(ys)
size = int(ylen / n)
chunks = [ys[0+size*i : size*(i+1)] for i in xrange(n)]
leftover = ylen - size*n
edge = size*n
for i in xrange(leftover):
chunks[i%n].append(ys[edge+i])
return chunks
This works as intended
>>> chunk(range(10), 3)
[[4, 1, 2, 7], [5, 3, 6], [9, 8, 0]]
But it seems rather long and boring. Is there a library function that could perform this operation? Are there pythonic improvements that can be made to my code?