hsmwhsmw

初心者入門スライスを使って文字列の指定範囲の部分文字列を取得する | Python入門

eyecatch

文字列ではスライスという機能を使うことで、開始位置のインデックスから終了位置のインデックスまでの部分文字列を取得することができます。ここではスライス機能を使って文字列から指定した範囲の部分文字列を取得する方法について解説します。

目次

  1. スライス機能の使い方
  2. 開始インデックスまたは終了インデックスを省略する
  3. 部分文字列を取得する時のステップ数を指定する

スライス機能の使い方

文字列ではインデックスを指定することで指定した位置の文字を取得することができますが、スライス機能を使うと開始位置から終了位置までの指定した範囲にある部分文字列を取得することができます。書式は次の通りです。

文字列[開始インデックス:終了インデックス]

範囲を指定する方法ですが、範囲の最初の文字のインデックスを開始インデックスに指定し、範囲の最後の文字のインデックスに +1 した値を終了インデックスとして指定します。次の例を見て下さい。

F L O W E R
-----------
0 1 2 3 4 5

FLOWER という文字列から LOW という部分文字列を取得する場合、開始インデックスに 1 、終了インデックスに 4 を指定します。これは次のようにインデックスの位置を少しずらして考えてもらうと分かりやすいかと思います。

 F L O W E R
-------------
0 1 2 3 4 5 6

LOW という部分文字列を取得するには L の前の 1 から W の後の 4 までを指定するということになります。

サンプルプログラム

簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample11-1.py という名前で保存します。

str = "Flower"
print(str[1:4])

スライス機能の使い方(1)

その後、次のように実行してください。

python sample11-1.py

スライス機能の使い方(2)

文字列の中から指定した範囲の文字列を取得することができました。

開始インデックスまたは終了インデックスを省略する

スライス機能を使って部分文字列を取得する場合、開始インデックスまたは終了インデックスを省略することができます。

開始インデックスを省略した場合は 0 が指定されたものとみなされます。 0 は文字列の最初の文字のインデックスなので、開始インデックスを省略した場合は文字の先頭から部分文字列を取得するという意味になります。

print("Flower"[:3])
--> "Flo"

終了インデックスを省略した場合は len(文字列) の値が指定されたものとみなされます。 len 関数の引数に文字列を指定した場合は文字列の文字数を返しますので、終了インデックスを省略した場合は文字列の最後までを取得するということになります。

print("Flower"[4:])
--> "er"

開始インデックスと終了インデックスを共に省略した場合は、文字列の先頭から文字列の最後までとなるので、元になる文字列と同じ文字列を取得することになります。

print("Flower"[:])
--> "Flower"

※ len 関数で引数に文字列を指定する場合の詳細については「文字列の長さ(文字数)を取得する」を参照されてください。

サンプルプログラム

簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample11-2.py という名前で保存します。

str = "Flower"
print(str[:3])
print(str[3:])
print(str[:])

開始インデックスまたは終了インデックスを省略する(1)

その後、次のように実行してください。

python sample11-2.py

開始インデックスまたは終了インデックスを省略する(2)

スライスを使用する時に開始インデックスまたは終了インデックスを省略して部分文字列を取得しました。

部分文字列を取得する時のステップ数を指定する

スライス機能を使て部分文字列を取得する場合、開始インデックスから終了インデックスまでの範囲の文字をすべて取得していました。これを最初の文字から開始して指定した文字毎に文字を取得したい場合にはステップ数を指定することができます。書式は次の通りです。

文字列[開始インデックス:終了インデックス:ステップ数]

例えば "京都府京都市左京区吉田本町" という文字列に対して開始インデックスを 1 、終了インデックスを 12 とすると次の部分文字列を取得することができます。

"京都府京都市左京区吉田本町"[1:12]
--> 都府京都市左京区吉田本

範囲内のすべての文字ではなく 2 文字毎に文字を取得する場合は次のように実行します。

"京都府京都市左京区吉田本町"[1:12:2]
--> 都京市京吉本

なおステップ数が省略された場合は 1 が指定されたものとみなされます(範囲内の全ての文字を取得します)。

サンプルプログラム

簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample11-3.py という名前で保存します。

str = "京都府京都市左京区吉田本町"
print(str)
print(str[1:12])
print(str[1:12:2])
print(str[1:12:3])

部分文字列を取得する時のステップ数を指定する(1)

その後、次のように実行してください。

python sample11-3.py

部分文字列を取得する時のステップ数を指定する(2)

ステップ数を使って、指定範囲の文字列の中から何文字毎に文字を取得するのかを指定することができました。

-- --

スライス機能を使って文字列から指定した範囲の部分文字列を取得する方法について解説しました。