Python 3 の文字列型 str
に関する基本的な演算についてご紹介します。
以下の例では次の s1
s2
を使います。
s1 = 'hello'
s2 = 'world'
連結
+
は文字列を連結します。
s1 + s2 # => 'helloworld'
*
は文字列を繰り返します。
s1 * 3 # => 'hellohellohello'
比較
==
!=
<
>
等を使って文字列を比較することができます。
# 2 つの文字列が一致するかどうかをチェック
s1 == s2 # False
# 2 つの文字列が異なるかどうかをチェック
s1 != s2 # True
# 2 つの文字列の辞書上の順序を比較
s1 < s2 # True
<
と >
は辞書上の比較です。実際にこれらを使う機会はそう多くないと思います。
'a' < 'ab' # True
'aa' < 'b' # True
'a-a' < 'aa' # True
特定の文字が含まれているかどうかのチェック
文字列中に特定の文字列が含まれているかどうかのチェックは in
演算子で行えます。
'h' in 'hello' # True
'hel' in 'hello' # True
'hi' in 'hello' # False
直感的です。
インデックス・スライス
文字列の一部を取り出す処理――インデックスやスライスは []
で行えます。インデックスは 1
ではなく 0
で始まります。
s1[0] # => h
s1[1] # => e
s1[2] # => l
マイナスのインデックスを使用すると、文字列の末尾から取り出すことができます。 -1
が一番後ろの文字になります。
s1[-1] # => o
s1[-2] # => l
s1[-3] # => l
s1[-4] # => e
s1[-5] # => h
スライス(サブストリング取り出し)は、 []
を使って s1[begin:end]
という形で行えます。
s1[1:4] # => ell
s2[0:4] # => worl
s1[begin:end]
とすると、 s1[begin]
で始まり end - begin
個の文字を抜き出すことになります。 s1[end]
の文字は含まれません。
スライスにおいても、マイナスのインデックスを使うことができます。
s1[1:-1] # => ell
s2[0:-2] # => wor
スライスの始まりと終わりのインデックスは省略することができます。始まりを省略したときは先頭から、末尾を省略したときは末尾までの文字列を返します。
# start を省略した場合
s1[:-1] # => hell
# end を省略した場合
s2[1:] # => orld
# 両方を省略した場合
s1[:] # => hello
文字列の長さを越えるインデックスを指定した場合、単一文字の取り出しではエラーが発生します。スライスの場合はエラーは発生しません。
s1[100] # IndexError
s1[100:105] # => ''
スライスで 3 つめの値を指定すると s1[begin:end:skip]
とすると、間を飛ばしながらスライスすることも可能です。
s2[0:5:2] # => wrd
文字列そのものの評価
文字列を if
文で評価すると、文字列が空の場合のみ False
を、それ以外は True
を返します。
if 'hello':
print('true')
else:
print('false')
# => 'true'
if '':
print('true')
else:
print('false')
# => 'false'
その他のよく使う文字列関連の関数・メソッド
他にも、文字列に対して使える関数やメソッドが豊富に用意されています。
文字列の長さは len()
関数で取得できます。
len(s1) # => 5
s1.count(s2) # s1 中に文字列 s2 が現れる回数
s1.encode(encoding) # s1 を指定された文字コードのバイト列に変換
s1.find(s2) # s1 の中に文字列 s2 があればその最初のインデックス
s1.rfind(s2) # s1 の中に文字列 s2 があればその最後のインデックス
s1.index(s2) # s1 の中に文字列 s2 があればその最初のインデックス
find()
と index()
のちがいは、文字列 s2
がなかったときの挙動です。 find()
は文字列 s2
がなかったときは -1
を返しますが、 index()
は ValueError
というエラーを返します。
文字列を分割するには split()
または partition()
を使います。
s1.split(s2) # s1 を文字列 s2 で分割したリスト
s1.partition(s2) # s1 を文字列 s2 で分割したリスト
split()
と partition()
のちがいは、 split()
が返すリストの要素に s2
を含まないのに対して、 partition()
が s2
を含む点です。
'world'.split('o')
# => ['w', 'rld']
'world'.partition('o')
# => ('w', 'o', 'rld')
参考
公式のドキュメントにはその他数多くのメソッドの使い方が載っています。