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.

この方法は文字列操作に限ったことではありませんので、覚えておくと役に立ちます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門