さて、Pythonでリストをあるk個のリストへなるべく均等に分割したい…というようなことが頻繁ではないけどたまーに欲しくなって、その都度何分かかけて書いてる(でときどきバグ作り込む)気がするのでスニペットとしてメモ。
やりたいこと。
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
…というような長さ12の配列を5分割する。
[ [0, 1], [2, 3], [4, 5, 6], [7, 8], [9, 10, 11] ]
何のことはありません。
def split_array(ar, n_group): for i_chunk in range(n_group): yield ar[i_chunk * len(ar) // n_group:(i_chunk + 1) * len(ar) // n_group]
Python2なら割り算のところは//でなく/でおk。
リストを受け取ればリストを返すし、rangeを受け取ればrangeを返します。
> [list(r) for r in split_array(range(12), 5)] [ [0, 1], [2, 3], [4, 5, 6], [7, 8], [9, 10, 11] ]
1982798万番煎じぐらいだとおもう。