2013/01/14

Pythonの文字列演算

Pythonの文字列型に関する基本的な演算についてご紹介します。

連結

「+」は文字列の連結、「*」は文字列の繰り返して連結となります。
s1 = 'hello'
s2 = 'world'
としたとき、
s1 + s2  # 'helloworld'
s1 * 3  # 'hellohellohello'
となります。

比較

数値型と同様に、文字列型でも比較演算(== != < >など)を行うことができます。
s1 == s2  # False
s1 != s2  # True
s1 < s2  # True

特定の文字が含まれているかどうかのチェック

文字列中に特定の文字や文字列が含まれているかどうかのチェックはin演算子で行うことができます。
'h' in 'hello'  # True
'hel' in 'hello'  # True

インデックス・スライス

文字列の一部を取り出す処理――インデックスやスライスは[](大かっこ)で行うことができます。インデックスは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[1:-1]  # ell
s2[0:-2]  # wor

文字列の長さを越えたインデックスを指定するとエラーがあがりますが、スライスにおいて文字列の長さを越えたインデックスを指定してもエラーは出ません。
s1[100]  # エラー
s1[100:105]  # 空の文字列が返される ''

また、スライスの始まりと終わりのインデックスは省略することが可能です。省略した場合、beginは0を、endはlen(s1)を入力した場合と同じ結果が返ってきます。
s1[:-1]  # hell
s2[1:]  # orld

s1[begin:end:skip]とすると、何個か飛ばしにスライスすることも可能です。
s2[0:5:2]  # wrd

文字列そのものの評価

文字列をif文で評価すると、文字列が空の場合のみFalseを、それ以外はTrueを返します。
if 'hello':
    print 'A'
else:
    print 'B'
# 'A'
if '':
    print 'A'
else:
    print 'B'
# 'B'

その他のよく使う文字列関連の関数・メソッド

他にも、文字列に対して使う関数やメソッドが豊富に用意されています。

文字列の長さは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を含む点です。

公式のドキュメントにはその他数多くのメソッドの使い方が載っています。
String Method - Python v2.7.3 documentation

0 件のコメント: