logo

Pythonのスライスについてのすべて 📂プログラミング

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]

また、startstopstepそれぞれを省略でき、以下のすべてのコードが有効だ。デフォルト値は start=0stop=len(data)step=1 だ。

data[start : stop : ]
data[start : : step]
data[ : stop : step]
data[start : :]
data[: stop :]
data[: : step]
data[::]
data[:]

負の step

stepに負の値を指定することもできる。この場合、startstopを明示的に指定するなら、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]