Python の文字列はシングルクォートかダブルクォートで囲んで生成します.どちらの場合も出力はシングルクォートで囲われていることに注意しよう.
文字列1
'Mojiretsu'
'Mojiretsu'
文字列2
"文字列"
'文字列'
シングルクォートで囲んだときは,文字列の中でダブルクォートが利用できます.
文字列3
'今日はPython"文字列"のお勉強'
'今日はPython"文字列"のお勉強'
ダブルクォートで囲んだときは,文字列の中でシングルクォートが利用できます.
文字列4
"ダブルクォートで囲ったときは文字列に'シングルクォート'が使えます"
"ダブルクォートで囲ったときは文字列に'シングルクォート'が使えます"
3つのシングルクォートやダブルクォートで囲えば,複数行の文字列を利用できます.
文字列5
msg = '''ゼミの課題
Pythonのお勉強
文字列を理解する'''
print(msg)
ゼミの課題 Pythonのお勉強 文字列を理解する
print()での出力と対話型インタプリタの自動エコーの出力には違いがあります.次の結果の\n
は改行文字を意味します.
文字列6
msg
'ゼミの課題\nPythonのお勉強\n文字列を理解する'
\
によるエスケープは特別な意味になります.具体的には\n
は改行のエスケープシーケンス,\t
はタブ文字のエスケープシーケンスです.また,シングルクォートで囲われた文字列の中でシングルクォートを使いたいときや,ダブルクォートで囲われた文字列の中でダブルクォートを使いたいときにも,\'
や \"
といったエスケープシーケンスを使います.さらに,\
そのものを表示したければ,\\
のように2つ重ねます.なお,日本語版 Windows では円マーク \
ですが,Mac や Linux ではバックスラッシュ \
を使います.(なお, 日本語版 Windows 環境では \
が「円マーク」で表示されたり,「バックスラッシュ」で表示されることもあるようです.キーボードから入力する場合は右上側にある ¥ キーを使います.)
エスケープ
msg = 'no\tx\ty\n1\t5\t10\n2\t20\t30'
print(msg)
msg = 'シングルクオート \' を使います'
print(msg)
msg = "ダブルクォート \" を使います"
print(msg)
msg = '円マーク (\\) を表示するには "\\" を2つ重ねて "\\\\" と記述します'
print(msg)
no x y 1 5 10 2 20 30 シングルクオート ' を使います ダブルクォート " を使います 円マーク (\) を表示するには "\" を2つ重ねて "\\" と記述します
raw 文字列を使うと,\n
や \t
などのエスケープシーケンスがエスケープシーケンスとして処理されなくなります.つまり,\n などの文字列をそのままの文字列として扱いたいような場合には raw 文字列を使えば良いことになります.raw 文字列は先頭に r
または R
を入力して,次のように定義します.
msg = r"これは raw 文字列なので,\nや\tなどのエスケープシーケンスが単なる文字列として取り扱われます."
print(msg)
これは raw 文字列なので,\nや\tなどのエスケープシーケンスが単なる文字列として取り扱われます.
通常の文字列ではもちろんエスケープシーケンスとして取り扱われます.
msg = "これは通常の文字列なので,\nや\tなどのエスケープシーケンスがエスケープシーケンスとして取り扱われます."
print(msg)
これは通常の文字列なので, や などのエスケープシーケンスがエスケープシーケンスとして取り扱われます.
+
で文字列の連結ができます.
連結
"How are you? " + "I'm good!"
"How are you? I'm good!"
*
で文字列を繰り返す.
繰り返し
msg = 'good ' * 5
print(msg)
good good good good good
[ ]
で文字を抽出できます.ただし,0番目からスタートすることに注意します.また,-1を指定すれば右端の文字になり,負の数では右端からスタートして文字を抽出します.
抽出1
msg = 'KobeGakuinUniversity'
msg[0]
'K'
抽出2
msg[1]
'o'
抽出3
msg[19]
'y'
抽出4
msg[-1]
'y'
抽出5
msg[-2]
't'
文字列 KobeGakuinUniversity
とインデックスの関係は次のようになります.
K | o | b | e | G | a | k | u | i | n | U | n | i | v | e | r | s | i | t | y |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
-20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
[start:end:step]
でスライスします.
すべて
msg = 'KobeGakuinUniversity'
msg[:]
'KobeGakuinUniversity'
オフセット10からすべて
msg[10:]
'University'
オフセット10まで
msg[:10]
'KobeGakuin'
オフセット4から10まで
msg[4:10]
'Gakuin'
先頭から3文字ごとに
msg[::3]
'Keknirt'
オフセット2から15まで先頭から4文字ごとに
msg[2:15:4]
'bkUe'
len()
で文字列の長さを取得します.
文字列の長さ
msg = 'KobeGakuinUniversity'
len(msg)
20
split()
で分割します.以下の例では英文をスペースで区切って,リスト形式にします.
空白で区切る
msg = 'Processing strings in Python is relatively easy.'
msg.split(' ')
['Processing', 'strings', 'in', 'Python', 'is', 'relatively', 'easy.']
リストに格納された複数の文字列を結合して1つの文字列にまとめるという処理は,join()
を使うと可能です.例えば,成績評価のリストを「カンマとスペース」を間にはさみながら結合するには次のように入力します.(「区切り文字列」を先に指定して,「連結したいリスト」を join()
に渡すという書き方は,直感的ではありませんが,このように記述する必要があります.)
evaluations = ['S', 'A', 'B', 'C', 'D', '/']
', '.join(evaluations)
'S, A, B, C, D, /'
「スペース」を間にはさみながら結合すると次のようになります.
evaluations = ['S', 'A', 'B', 'C', 'D', '/']
' '.join(evaluations)
'S A B C D /'
区切り文字を一切入れずに結合することも可能です.
evaluations = ['S', 'A', 'B', 'C', 'D', '/']
''.join(evaluations)
'SABCD/'
文字列の先頭や末尾に余分なスペースなどが入力されているときにそれらを削除するという処理が必要になります.特に,ユーザからの入力を受け取ったときには,実際の処理を行う前に余分なスペースを除去する作業を頻繁に行います.strip()
関数は,先頭と末尾にある「空白文字」,「タブ文字」,「改行文字」を除去した結果を返します.例えば,次の場合は前後に空白が入力されています.
name = " Koichiro "
name
' Koichiro '
次のように strip()
関数を使うと空白文字が除去されました.
name.strip()
'Koichiro'
半角空白だけでなく,日本語の全角空白であっても問題なく除去してくれます.
name = " 弘一郎 "
name.strip()
'弘一郎'
空白(タブ,改行を含む)以外の文字も除去したいという状況も考えられます.次のように削除したい文字を指定すればそれらの文字が除去されます.例えば,「半角空白」「,」「.」「!」という4種類の文字を除去します.このとき,文字列の途中にある空白やカンマは除去されていないことにも注意してください.
msg = "Hello, Koichiro!!!., !! "
msg.strip(' ,.!')
'Hello, Koichiro'
文字列の準備
msg = 'processing strings in Python is relatively easy.'
全て大文字に
msg.upper()
'PROCESSING STRINGS IN PYTHON IS RELATIVELY EASY.'
全て小文字に
msg.lower()
'processing strings in python is relatively easy.'
先頭だけ大文字に
msg.capitalize()
'Processing strings in python is relatively easy.'
単語の先頭を大文字に
msg.title()
'Processing Strings In Python Is Relatively Easy.'
大文字と小文字を入れ替える
msg.swapcase()
'PROCESSING STRINGS IN pYTHON IS RELATIVELY EASY.'
変数の値を用いて文字列を生成するには Python 3.6 で追加された f 文字列が便利です.f 文字列を使うと書式設定を柔軟に行えるようになります.f 文字列を生成するには f
または F
をクォート(またはダブルクォート)の前に配置します.さらに { }
で囲った中に変数や式を入力すると,その値が文字列の中に差し込まれます.
item = "Cup"
price = 100
print(f"この{item}の値段は{price}円です")
このCupの値段は100円です
f 文字列では変数や式の直後に :
とオプションを入れると,幅などの書式指定が可能になります.次のように入力すると,文字列 (s) を 10文字,10進整数 (d) を 8 文字の幅で書式設定できます.
item = "Cup"
price = 100
print(f"この{item:10s}の値段は{price:8d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:10s}の値段は{price:8d}円です")
このCup の値段は 100円です このWin Grass の値段は 1280円です
また,06d
のように指定すると数値の先頭をゼロで埋めることができます.
item = "Cup"
price = 100
print(f"この{item:10s}の値段は{price:06d}円です")
item = "Win Grass"
price = 1280
print(f"この{item:10s}の値段は{price:06d}円です")
このCup の値段は000100円です このWin Grass の値段は001280円です
これ以外にも様々な書式設定が可能です.詳細は「f 文字列で書式を設定する」を参照してください.