TIL

Today I Learned. 知ったこと、学んだことを書いていく

スライス - Python

Pythonでの文字列の一部を取得したいときにはスライスという機能を使う。

スライスは[start:end:step]となっている。また、startendはオフセット(0から)となっていることに注意する。オフセットは先頭から右に向かって0, 1, ...となり、末尾から左に向かって-1, -2, ...となる。

例)

>>> s = 'abcdefghijklmnopqrstuvwxyz'

何も指定しない

すべてを取り出すには[:]でできる。

>>> s[:]
'abcdefghijklmnopqrstuvwxyz'  

startのみ

[start:]とstartだけ指定すると、startオフセットから末尾まで取得する。

>>> s[20:]
'uvwxyz'    

endのみ

[:end]とendだけ指定すると、先頭からend-1オフセットまで取り出す

>>> s[:8]
'abcdefgh'

startとendを指定

オフセット12から14を取得する。endの15は含んでいないことに注意する。

>>> s[12:15]
'mno'

startとendに負の数を指定

最後の3文字を取り出す。startに負の数を指定することで、末尾からのオフセットを指定できる。

>>> s[-3:]
'xyz'
>>> s[len(s)-3:]
'xyz'

オフセット18から末尾より4文字まで取得する。実際には-3ではなく、-4のwまでになっていることに注意する。

>>> s[18:-3]
'stuvw'
>>> s[18:len(s)-3]
'stuvw'

ステップ

ステップを使って先頭から末尾までで7ごとに取得してみる。

>>> s[::7]
'ahov'

オフセット4から19までで3文字ごとに取得する。

>>> s[4:20]
'efghijklmnopqrst'
>>> s[4:20:3]
'ehknqt'

オフセット19から末尾までで4文字ごとに取得。

>>> s[19:]
'tuvwxyz'
>>> s[19::4]
'tx'

先頭からオフセット20までで5文字ごとに取得する。

>>> s[:21]
'abcdefghijklmnopqrstu'
>>> s[:21:5]
'afkpu'

重要なことは末尾のオフセットはend-1になるということ。

ステップに負の数

ステップに負の数を指定することで逆にステップする。

>>> s[-1::-1]
'zyxwvutsrqponmlkjihgfedcba'
>>> s[::-1]
'zyxwvutsrqponmlkjihgfedcba'

オフセットの指定

オフセットの指定はインデックスの指定のときに比べてゆるゆるになっている。文字列の範囲外のオフセットを指定してもエラーにならない。



参考文献

入門 Python 3

入門 Python 3