python2でリストをn個ずつのサブリストに分割する

codeevalのsudokuやったときに調べたのでメモ。
結局使わなかったけど。

Python2でCodeEvalのSUDOKU - brainstorm

# coding=utf-8
size = 4
digits = [1, 4, 2, 3, 2, 3, 1, 4, 4, 2, 3, 1, 3, 1, 4, 2]


# リスト内包表記
print [digits[x:x + size] for x in xrange(0, len(digits), size)]
# [[1, 4, 2, 3], [2, 3, 1, 4], [4, 2, 3, 1], [3, 1, 4, 2]]


# ジェネレータ
def chunks(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i + n]
print list(chunks(digits, size))
# [[1, 4, 2, 3], [2, 3, 1, 4], [4, 2, 3, 1], [3, 1, 4, 2]]


# more-itertools
from more_itertools import chunked
print list(chunked(digits, size))
# [[1, 4, 2, 3], [2, 3, 1, 4], [4, 2, 3, 1], [3, 1, 4, 2]]