初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

文字列をもう少し詳しく学ぼう!第二弾

文字列の基本操作[2]

前回は文字列の基本操作のうちエスケープシーケンス、連結、繰り返しについて学びました。 今回は文字の抽出とスライスについて勉強していきましょう。 特にスライスは、配列を扱う際にも重要な操作となりますのでしっかりと身につけていきましょう。

文字の抽出

Pythonでは、文字列の中のある1つの文字を取り出したい時には、角括弧("["と"]")で囲んだ文字のオフセットにより指定します。先頭の文字のオフセットがは0です。Pythonのオフセットは始まりが0であり、1ではないので気をつけましょう。また、オフセットの指定は先頭からだけではなく、末尾からの指定もすることもできる。末尾から指定する場合には負の値を用います。例えば、末尾の指定は-1です。それでは、実際に例を確認しましょう。

>>> str = "0123456789"
>>> str[0]
'0'
>>> str[5]
'5'
>>> str[-1]
'9'
>>> str[-3]
'7'
>>> str[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> str['10']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string indices must be integers

上記の例のように使い方はとてもシンプルです。しかし、文字列以上の長さのオフセットや無効な型のオフセットを用いると例外が起きるので注意しましょう。オフセットの範囲は[0]から[文字列の長さ-1]までです。また、このオフセットを使った値の参照はリストやタプルなどのその他のシーケンス型のオブジェクトに対しても機能します。確認の例を見ておきましょう。

>>> array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> array[0]
0
>>> array[-3]
7

また、オフセットを利用することでミュータブルなオブジェクトの中身を変更することができます。イミュータブルなオブジェクトの中身を変更しようとする例外が起きます。例で確認しましょう。

>>> array[0] = 1
>>> array
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> str[0]=1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

リストはミュータブルなので要素が置き換わりましたが、文字列はイミュータブルなので例外が起きました。文字列を置き換えるにはreplace()などの文字列関数などを利用する必要があります。

スライスによる文字の抽出

Pythonにはスライスという便利な機能があります。スライスお使うことにより文字列から一部の文字列を取り出すことができます。スライスは、角括弧と先頭オフセット、末尾オフセット、ステップ数([start:end:step])で定義します。毎回これらすべてを定義しなければいけないわけではありません。スライスにおいて注意しなければならないことは、先頭オフセットから末尾のオフセット-1までの文字が部分文字列となるということです。末尾のオフセットの文字は含まれません。それでは例を見ていきましょう。

>>> str[:]
'0123456789'
>>> str[0:]
'0123456789'
>>> str[:10]
'0123456789'
>>> str[3:7]
'3456'
>>> str[0:10:2]
'02468'
>>> str[-3:]
'789'
>>> str[::-1]
'9876543210'

上記の例のように、ステップ数を省略するとステップ数は1になります。末尾オフセットを省略すると先頭オフセットから文字列の末尾まで、先頭オフセットを省略すると文字列の先頭から末尾オフセットまでの文字列となります。また、マイナスを使うことにより末尾の方から文字列を取り出すことができます。スライスの使い方は、自分で手を動かして色々やってみるのが1番理解しやすいので是非やって見てください。

今回はここで終了です。お疲れ様でした。次回は、計算式の評価の仕組みについて書こうと思っています。