スライスまとめ
入門Python3 2.3.7
「[]演算子」を使って文字列をスライスすることができます。仕様がわりと複雑なのでひとつずつ確認していくことにします。
str[start:] startの位置から末尾までの文字列を返します
str = 'FooBarBaz' result = str[3:] print(result)
$ py main.py BarBaz
str[:end] 先頭からend-1の位置までの文字列を返します
str = 'FooBarBaz' result = str[:3] print(result)
$ py main.py Foo
str[start:end] startの位置からend-1の位置までの文字列を返します
str = 'FooBarBaz' result = str[3:6] print(result)
$ py main.py Bar
str[start:end:step] startの位置からend-1の位置までの文字列に対してstepごとの文字列を返します
ちょっとややこしいですが要するにstart,end範囲内の文字列からstepの数だけ飛ばしながら文字列が取れるってかんじですかね。
str = 'FooBarBaz' result = str[0:9:3] print(result)
$ py main.py FBB
str[:] 文字列全体を返します
str = 'FooBarBaz' result = str[:] print(result)
$ py main.py FooBarBaz
要するに単なるコピーってことですね。一瞬なんの役に立つのかとおもったのですが、Pythonはすべてがオブジェクトなので単なる代入をしただけでは参照が変わらないので注意が必要です。
ただ文字列はイミュータブルなのでどちらにせよ文字列に対して[:]でコピーを生成する必要性はまったく感じらないので、この処理自体はまったく意味の無い処理だと思います。
さてこれらstartやendには負の整数も指定することができるようです。
負の整数を指定した場合、文字列の末尾から左へ遷移した位置を指定できることになります。
ちょっと実例をみて確認してみましょう。
str = 'FooBarBaz' result = str[-6:-3] print(result)
$ py main.py Bar
ややこしいですが、以下のような状態になっています。
FooBarBaz ^ ^ -6 -3
start=-6なので末尾から左へ6番目の位置、end=-3なので末尾から左へ3番目の位置、といった具合です。