Python の文字列
Python の文字列の書式指定、フォーマットについては「Python の文字列の書式指定・フォーマット」をみてください。
Python の文字列リテラル
プログラミングでは文字の並びを「文字列」(string) といいます。そして、ソースコードに直接文字列を書いたものを「文字列リテラル」という言い方をします。
実際には、文字列リテラルのことを単に「文字列」と呼び、厳密に区別しないことも多いです。当サイトでもほぼ区別していません。
Python では文字列は ' または " でテキストを囲むことによって記述できます。 ' で文字列リテラルが始まったら、' で終わり、"で始まったら"で終わります。
例えば、'Hello' とか "こんにちは" のようにします。
文字データ中に区切り文字と同じものが出現するときはエスケープ文字 (=バックスラッシュ) でエスケープします。 " の場合も同様です。
文字列中のエスケープ文字は C 言語の場合とほぼ同様です。
>>> a = 'CA'
>>> a
'CA'
>>> b = "TX"
>>> b
'TX'
>>> c = 'ABC\'D' # ' で始まる文字列中で ' を使う
>>> c
"ABC'D"
>>>
Python の複数行文字列リテラル
複数行にわたる文字列を記述する場合は、\n などのエスケープシーケンスを使うことで書けます。
その他、文字列リテラルの開始文字を三つ並べた''' または """ を用いて文字列を記述することもできます。
>>> msg = '''
Hi,
My name is John Doe.
'''
>>> msg
'\nHi,\nMy name is John Doe.\n' # 改行箇所は \n になる
>>>
Python の文字列の結合と繰り返し
文字列の結合をするために + 演算子が使えます。
>>> a = 'Hello'
>>> b = 'world'
>>> a + ', ' + b
'Hello, world'
文字列を繰り返すためには * 演算子を用いて、繰り返し回数を指定することができます。
>>> a = 'Hello'
>>> a * 2
'HelloHello'
Python 文字列中の文字へのインデックスアクセス
文字列中のそれぞれの文字へは0ベースのインデックスでアクセス可能です。
>>> a = 'Hello'
>>> a[0]
'H'
>>> a[1]
'e'
また文字列の終端から1文字目、2文字目、・・・という風にアクセスするには、マイナスの記号を用いて次のようにします。
>>> a = 'Hello'
>>> a[-1]
'o'
>>> a[-2]
'l'
末尾の文字はインデックス -1 です。これは(全体の文字列長) - 1 の省略形である、と考えると覚えやすいです。
Python の部分文字列
インデックスを書く []の中でコロン : を使うことで、文字列中の部分文字列を取り出すことができます。
基本的に [start:end] としますが、省略すると全部ということになります。 例えば [:3] とすると、「先頭からインデックス 3 より前までの部分文字列」になります。
>>> a = 'Hello'
>>> a[1:3]
'el'
>>> a[3:]
'lo'
>>> a[:-2]
'Hel'
Python の文字列に使える関数の調べ方
Python では文字列操作用のビルトイン関数が多数用意されています。
文字列の長さを求めるには len 関数、大文字にするには upper 関数など、 他のプログラミング言語を扱ったことのある人なら、ある程度直感的にわかると思います。
>>> a = 'Hello'
>>> len(a) # a の長さ
5
>>> a.find('e') # 最初に 'e' が出現する場所のインデックス
1
>>> a.upper() # 大文字に変換
'HELLO'
ちなみに、dir関数を用いると、今扱っているオブジェクトのアトリビュートが取得できます。(アトリビュートについては別のページで扱います)
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__',
'__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count',
'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index',
'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier',
'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace',
'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate',
'upper', 'zfill']
これによって、文字列 a が持つ関数がわかるので、help 関数にその名前を渡すと、 その関数の意味、用法がわかります。
>>> help(a.find)
Help on built-in function find:
find(...) method of builtins.str instance
S.find(sub[, start[, end]]) -> int
Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
この方法は文字列操作に限ったことではありませんので、覚えておくと役に立ちます。