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?