Python の文字列はシングルクォートかダブルクォートで囲んで生成する.どちらの場合も出力はシングルクォートで囲われていることに注意しよう.
文字列1'Mojiretsu'
'Mojiretsu'
文字列2"文字列"
'文字列'
シングルクォートで囲んだときは,文字列の中でダブルクォートが利用できる.
文字列3'今日はPython"文字列"のお勉強'
'今日はPython"文字列"のお勉強'
ダブルクォートで囲んだときは,文字列の中でシングルクォートが利用できる.
文字列4"ダブルクォートで囲ったときは文字列に'シングルクォート'が使えます"
"ダブルクォートで囲ったときは文字列に'シングルクォート'が使えます"
3つのシングルクォートやダブルクォートで囲えば,複数行の文字列を利用できる.
文字列5msg = '''ゼミの課題
Pythonのお勉強
文字列を理解する'''
print(msg)
ゼミの課題 Pythonのお勉強 文字列を理解する
print()での出力と対話型インタプリタの自動エコーの出力には違いがあります.次の結果の\n
は改行文字を意味します.
文字列6msg
'ゼミの課題\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を指定すれば右端の文字になり,負の数では右端からスタートして文字を抽出する.
抽出1msg = 'KobeGakuinUniversity'
msg[0]
'K'
抽出2msg[1]
'o'
抽出3msg[19]
'y'
抽出4msg[-1]
'y'
抽出5msg[-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 = 'You already know that Alamo is a great choice for your next vacation rental.'
msg.split(' ')
['You', 'already', 'know', 'that', 'Alamo', 'is', 'a', 'great', 'choice', 'for', 'your', 'next', 'vacation', 'rental.']
リストに格納された複数の文字列を結合して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 = 'you already know that Alamo is a great choice for your next vacation rental.'
全て大文字にmsg.upper()
'YOU ALREADY KNOW THAT ALAMO IS A GREAT CHOICE FOR YOUR NEXT VACATION RENTAL.'
全て小文字にmsg.lower()
'you already know that alamo is a great choice for your next vacation rental.'
先頭だけ大文字にmsg.capitalize()
'You already know that alamo is a great choice for your next vacation rental.'
単語の先頭を大文字にmsg.title()
'You Already Know That Alamo Is A Great Choice For Your Next Vacation Rental.'
大文字と小文字を入れ替えるmsg.swapcase()
'YOU ALREADY KNOW THAT aLAMO IS A GREAT CHOICE FOR YOUR NEXT VACATION RENTAL.'
変数の値を用いて文字列を生成するには 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 文字列で書式を設定する」を参照してください.