Pythonのスライスについてのすべて
説明
Pythonにおけるスライスの核心は角括弧 [] 内でコロン : を使うことだ。
data[start : stop : step]
start: データを切り出す開始位置(含む)stop: データを切り出す終了位置(含めない)step: データを切り出す刻み幅
つまり、上記のコードを詳述すると、「data[start : stop : step]とは、data内のstart番目の要素からstop-1番目の要素までをstepごとに切り出すこと」だ。
まず第一に、二番目のコロン以降は省略可能で、この場合は:1と入力したのと同じだ。
data[start : stop] == data[start : stop : 1]
また、start、stop、stepそれぞれを省略でき、以下のすべてのコードが有効だ。デフォルト値は start=0、stop=len(data)、step=1 だ。
data[start : stop : ]
data[start : : step]
data[ : stop : step]
data[start : :]
data[: stop :]
data[: : step]
data[::]
data[:]
負の step
stepに負の値を指定することもできる。この場合、startとstopを明示的に指定するなら、startにはstopより大きな値を設定する必要がある。data[::-1] のようにすると全要素を逆順に取得する。
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[7:3:-1]
[7, 6, 5, 4]
>>> a[7:1:-2]
[7, 5, 3]
負のインデックス
slice()
特定のスライス範囲が繰り返し使われる場合、slice()で変数のように定義しておける。
注意点
最大インデックスを超えるような値を指定してもエラーにならず、可能な範囲だけでデータを切り出す点に注意すべきだ。
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:100]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[3:100]
[3, 4, 5, 6, 7, 8, 9]
