[arr[i::n] for i in range(n)]
arr
: 分割したいリスト(配列)n
: 分割数
>>> arr = [1, 2, 3, 4, 5, 6, 7] >>> n = 3 >>> divided_arr = [arr[i::n] for i in range(n)] >>> divided_arr [[1, 4, 7], [2, 5], [3, 6]]
解説
range(n)
は0からN-1までの整数を生成します。
>>> range(3) [0, 1, 2]
arr[i::n]
はリストのスライスです。[start:end:step]
となります。
step=3
としてstart
を1ずつ増やした場合を見てみましょう。
>>> arr = [1, 2, 3, 4, 5, 6, 7] >>> arr[0::3] [1, 4, 7] >>> arr[1::3] [2, 5] >>> arr[2::3] [3, 6]
もうわかりましたね?
range
で生成したインデックスをスライスのstart
に設定しているというわけですね。