スライス
スライスを使ってリストの要素を部分的に取得できる。
インデックス1〜3の要素を取得
>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[1:4]
[2, 3, 4]
※ 終端は インデックス + 1の値となる
ステップを指定
>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[1:8:2] # インデックス1〜7の要素を2ステップで
[2, 4, 6, 8]
最後の要素にアクセス
>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[-1]
9
-1は一番後ろの要素で、-2は後ろから2番目の要素、-3は。。。(略)
>>> a[-2]
8
>>> a[-3]
7
>>> a[-4]
6
スライスではインデックスをオーバーしてもエラーにならない
>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[5:20]
[6, 7, 8, 9]
>>> a[-100:4]
[1, 2, 3, 4]
一番最初から~○○まで
先頭を省略すると「一番最初」の要素を示す
>>> a[0:4]
[1, 2, 3, 4]
と
>>> a[:4]
[1, 2, 3, 4]
は同義
○○から~一番後ろまで
末尾を省略すると「一番最後」の要素を示す
>>> a[5:len(a)]
[6, 7, 8, 9]
と
>>> a[5:]
[6, 7, 8, 9]
は同義
>>> a = [1,2,3,4,5,6,7,8,9]
>>> a[-4:]
[6, 7, 8, 9]
なんてこともできる
すべての要素を指定
>>> a[0:len(a)]
と
>>> a[:]
または
>>> a[::]
は同義
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:len(a)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
スライスされたリストは、元のリストとは別インスタンス
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = a[-5:]
>>> b
[5, 6, 7, 8, 9]
>>> b[1] = 60
>>> b
[5, 60, 7, 8, 9]
# 元リストはコピーしたリストとは別インスタンスなので、変更の影響を受けない
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
マイナスのステップ
先にふれたようにスライスではステップが指定できた。
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[3:8:2] # インデックス 3〜7を2ステップで
[4, 6, 8]
以下のようにすると逆方向にスライスできる。
>>> a[7:2:-2] # インデックス7〜3を-2ステップで
[8, 6, 4]
範囲を全指定にしてマイナスステップにすると、要素がリバースする。
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
文字列に対して
文字列に対しても同じく以下のように。
>>> txt = '123456789'
>>> txt[1:4]
'234'
>>> txt[-1]
'9'
>>> txt[:4]
'1234'
>>> txt[5:]
'6789'
>>> txt[::-1]
'987654321'