sec01 - 文字列のインデックス

このレクチャーでは、文字列のインデックスについて学習します。

文字列のインデックス

Pythonは文字の情報を、左から順番に要素番号(インデックス)を付けて管理しています。

例えば、I'm Nico, 10.("私はNico、10歳です。")という文字列は次のようにインデックス管理されています。

[0][1][2][3][4][5][6][7][8][9][10][11][12]
I'm Nico, 10.

表上段の'[n]'は要素番号(インデックス)で、Pythonで管理している各要素(今回の場合は文字)の順番を表しています。人間の世界では1から番号が始まりますが、コンピューターの世界では0から番号が始まります。ですので、上記文字列は『要素番号[0]から[12]までの、13個の要素で構成されている』ということになります。

(人の数え方と要素番号がずれるので、最初は難しく感じるかもしれませんが、コードを書いていくうちに慣れていきます。)

Pythonの場合、文字列の各要素は1文字ずつ管理され、数字やスペースなどの記号も1つの要素として管理されます。また、漢字や平仮名などの文字も、1文字ずつ要素として管理されます。

文字列から、個々の文字を取得する(インデックス表記)

ここから、文字列から要素を抽出する方法を学習します。

要素番号の指定

先ほど、要素番号について学習しました。Pythonはその要素番号を指定して、特定の文字を抽出することができます。

それでは、先ほどの文字列の最初の文字(要素番号[0])と11番目の文字(要素番号[10])を抽出してみましょう。

s = "I'm Nico, 10."
print(s[0])  # "I"
print(s[10])  # "1"

上記コードを実行すると、I1が出力されます。変数名[要素番号]の書式で、その変数に保存されている文字列の、指定した要素番号の文字を抽出できます。

要素指定にマイナスの値を使用する

Pythonでは、要素番号にマイナスの値を指定し、要素を抽出することができます。[-1]は文字列の"最後から1つ目の要素"を指定することになります。順に、[-2]は文字列の"最後から2番目の要素"、[-3]は文字列の"最後から3番目の要素"...となります。

[0][1][2][3][4][5][6][7][8][9][10][11][12]
[-13][-12][-11][-10][-9][-8][-7][-6][-5][-4][-3][-2][-1]
I'm Nico, 10.

それでは、先ほど抽出した、I1を、マイナスのインデックス番号を使って抽出してみましょう。

s = "I'm Nico, 10."
print(s[-13])  # "I"
print(s[-3])  # "1"

上記コードを実行すると、先ほどと同じようにI1が出力されます。

指定できる要素番号の範囲

要素番号を指定して文字を抽出する時は、その文字列の範囲内で要素番号を指定しなくてはならず、それ以外の要素番号を指定するとエラーになります。

I'm Nico, 10.の要素番号の最大は[12]なので、13以上の番号を指定するとエラーになります。試しに、次のコードを実行してみましょう。

s = "I'm Nico, 10."
print(s[13])

実行すると、下図のようなエラーメッセージが表示されます。メッセージ内容は、『IndexError: string index out of range (インデックスエラー: 文字列要素番号の範囲外)』となっています。これは、正の数で指定した時だけでなく、マイナスの値で指定する時も範囲外の要素番号を指定するとエラーになります。

要素数を調べる

範囲外の要素番号を指定しないようにするためなど、文字列の要素数を知りたい場合は、"len()"関数を使うことができます。"len"とは、"length(長さ)"の略です。

次のようにコードを書いて、実行してみましょう。

s = "I'm Nico, 10."
print(len(s))

出力結果は、13になります。文字数が13なので、1番最後の要素番号はlen()の結果から1を引いた[12]になります。

あえて、len()を使って1番最後の文字を取得しようとする場合は、次のようにコードを書きます。

s = "I'm Nico, 10."
last_chr = s[len(s)-1]
print(last_chr)

角カッコのなかで、len(s)-1という計算を行うことで、1番最後の要素番号を得ることができます。

(※ Pythonの場合は[-1]の記法があるので、わざわざこのような書き方をしなくても大丈夫です。他のプログラミング言語では、このような書き方をするものもあるので紹介しました。)