Python:文字列の[]による抽出と、[ start:end:step ]によるスライス

スポンサーリンク

文字列の[]による抽出

文字列のなかのひとつの文字を取り出したいときには、文字列名の後ろに角かっこで囲んだ文字のオフセットを続けます。

先頭の文字のオフセットは0、その右が1、というように数えます。末尾の文字のオフセットは-1、右端の左は-2のように指定することもできます。

>>> tmp = 'abcdefghijklmnopqrstuvwxyz'
>>> tmp[0]
'a'
>>> tmp[1]
'b'
>>> tmp[-1]
'y'
>>> tmp[-2]
'z'

文字列の長さ以上のオフセットを指定すると例外が起きるので注意が必要です。

>>> tmp[50]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: string index out of range

文字列はイミュータブル(変更できない)なので、文字列に直接文字を挿入したり、指定したインデックスの位置の文字を書き換えたりすることはできません。

代わりに、replace()などの文字列関数やスライスの組み合わせを使う必要があります。

>>> tmp[0] = 'A'
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'str' object does not support item assignment
>>> tmp.replace('a', 'A')
'Abcdefghijklmnopqrstuvwxyz'
>>> 'A' + tmp[1:]
'Abcdefghijklmnopqrstuvwxyz'

文字列の[ start:end:step ]によるスライス

スライスを使えば、文字列から部分文字列を取り出すことができます。スライスは、角かっこと先頭オフセット(start)、末尾オフセット(end)、ステップ(step)で定義します。

  • [ : ] は、先頭から末尾までのシーケンス全体を抽出します。
  • [ start: ] は、startオフセットから末尾までのシーケンスを抽出します。
  • [ :end ] は、先頭からend-1オフセットまでのシーケンスを抽出します。
  • [ start:end ] は、startオフセットからend-1オフセットまでのシーケンスを抽出します。
  • [ start:end:step ] は、step文字ごとにstartオフセットからend-1オフセットまでのシーケンスを抽出します。
>>> tmp[:]
'abcdefghijklmnopqrstuvwxyz'
>>> tmp[10:]
'klmnopqrstuvwxyz'
>>> tmp[20:]
'uvwxyz'
>>> tmp[3:5]
'de'
>>> tmp[-5:]
'vwxyz'
>>> tmp[18:-3]
'stuvw'
>>> tmp[-6:-3]
'uvw'
>>> tmp[::7]
'ahov'
>>> tmp[4:20:3]
'ehknqt'

ステップサイズとして負数を指定すると、逆にステップしていきます。

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