文字列

文字列の基本

文字列は”~”(ダブルクォーテーション)または’~’(シングルクォーテーション)で囲って表す。”Python3″、”これは文字列です”など。数字はそのまま表記すれば数値として扱われ、””などで囲えば文字列として扱われる。

text = "123"
print(type(text))    # type関数で変数の型をチェック
# 実行結果
<class 'str'>    # strは文字列の意味

text = 123
print(type(text))
# 実行結果
<class 'int'>    # intは整数型の意味

シングルクォーテーションは文字列にダブルクォーテーションを含む場合に使用する。反対にシングルクォーテーションを文字列に含めたい場合はダブルクォーテーションを使用する。

text = 'これは"Python3"です'
print(text)
# 実行結果
これは"Python3"です

text = "これは'Python3'です"
print(text)
# 実行結果
これは'Python3'です

エスケープシーケンス

エスケープシーケンスとはテキストとして入力できない特殊文字を出力するための機能。代表的な特殊文字は改行やタブなど。これらを出力するには\(バックスラッシュ)を使うが、Windows環境では\で表示される。

text = "今日は\n晴れでした" # \nが改行を表す特殊文字
print(text)
# 実行結果
今日は
晴れでした

よく使うエスケープシーケンス

\n 改行
\t タブ
\r キャリッジリターン
\” ダブルクォーテーション
\’ シングルクォーテーション
\\ バックスラッシュ(\マーク)

ヒアドキュメント

長い文字列を入力する時はヒアドキュメントを使う。ダブルやシングルクォーテーションを3つ並べたもので囲うことで複数行の文字列を一度に扱える。”””~”””、”’~”’。

text = """「天は人の上に人を造らず人の下に人を造らず」と言えり。されば天より人を生ずるには、万人は万人みな同じ位にして、生まれながら貴賤上下の差別なく、万物の霊たる身と心との働きをもって天地の間にあるよろずの物を資り、もって衣食住の用を達し、自由自在、互いに人の妨げをなさずしておのおの安楽にこの世を渡らしめ給うの趣意なり。\nされども今、広くこの人間世界を見渡すに、かしこき人あり、おろかなる人あり、貧しきもあり、富めるもあり、貴人もあり、下人もありて、その有様雲と泥との相違あるに似たるはなんぞや。\nその次第はなはだ明らかなり。『実語教』に、「人学ばざれば智なし、智なき者は愚人なり」とあり。されば賢人と愚人との別は学ぶと学ばざるとによりてできるものなり。"""
print(text)
# 実行結果
「天は人の上に人を造らず人の下に人を造らず」と言えり。されば天より人を生ずるには、万人は万人みな同じ位にして、生まれながら貴賤上下の差別なく、万物の霊たる身と心との働きをもって天地の間にあるよろずの物を資り、もって衣食住の用を達し、自由自在、互いに人の妨げをなさずしておのおの安楽にこの世を渡らしめ給うの趣意なり。
されども今、広くこの人間世界を見渡すに、かしこき人あり、おろかなる人あり、貧しきもあり、富めるもあり、貴人もあり、下人もありて、その有様雲と泥との相違あるに似たるはなんぞや。
その次第はなはだ明らかなり。『実語教』に、「人学ばざれば智なし、智なき者は愚人なり」とあり。されば賢人と愚人との別は学ぶと学ばざるとによりてできるものなり。

文字列の連結

+演算子を使うと、文字列と文字列を連結させられる。

text = "Python" + "の備忘録"
print(text)
# 実行結果
Pythonの備忘録

a = "Python"
b = "の"
c = "備忘録"
text = a + b + c
print(text)
# 実行結果
Pythonの備忘録

数値と文字列の連結

数値と文字列を連結しようとすると型が異なるためエラーとなる。

price = 1000 + "円"
# エラー
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

型を合わせるため整数型の1000を文字列型に型変換する。

price = str(1000) + "円"
print(price)
# 実行結果
1000円

繰り返し文字

同じ文字列を繰り返すには*演算子を使う。

print("a" * 5)
# 実行結果
aaaaa

print("abc" * 5)
# 実行結果
abcabcabcabcabc

文字と文字列の取り出し(スライスとステップ)

文字列[文字位置]

文字列から特定の文字を取り出すには[]を使う。[]内に取り出す文字の位置を指定。文字は一文字目を0から数え、マイナスにすると最後尾の文字から数える。後ろから-1、-2 … となる。

0 1 2 3 4 5
s a m p l e
-6 -5 -4 -3 -2 -1
text = "sample"
print(text[3])
# 実行結果
p
print(text[-2])
# 実行結果
l

[]を使うと文字列から文字を取り出すことは出来るが、代入はできない。

text = "sample"
print(text[4] = "a")
# エラー
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Pythonではスライスを使い文字列から部分文字列を取り出すこともできる。

文字列[開始位置:終了位置]

開始位置に取得したい文字列の最初の文字のインデックスを、終了位置に取得したい文字列の最後のインデックスを指定する。[:]のようにインデックスを省略すると文字列全体を指す。[開始位置:]なら指定した開始位置から最後まで、[:終了位置]なら先頭から指定終了位置までを取り出す。

text = "月日は百代の過客にして、行かふ年も又旅人也"
print(text[:])
# 実行結果
月日は百代の過客にして、行かふ年も又旅人也
print(text[3:])    # 4文字目から最後まで
# 実行結果
百代の過客にして、行かふ年も又旅人也
print(text[3:6])    # 4文字目から6文字目まで
# 実行結果
百代の
print(text[3:3 + 4])    # 4文字目から4文字
# 実行結果
百代の過
print(text[:-6])    # 先頭から後ろから数えて6文字目の手前まで
# 実行結果
月日は百代の過客にして、行かふ

スライスは文字列の長さを超えた範囲を指定してもエラーにはならない。

text = "12345"
print(text[:10])
# 実行結果
12345

ステップは取得する文字や文字列を1文字飛ばし、2文字飛ばしなどのオプションをつけて取得できる。

文字列[開始位置:終了位置:ステップ]
text = "123456789"
print(text[::2])    # ステップを1つ飛ばしで指定
# 実行結果
13579

print(text[3::2])
# 実行結果
468
print(text[::-2])    # 後ろから1つ飛ばし
# 実行結果
97531
print(text[::-1])    # ステップを-1で逆順にできる
# 実行結果
987654321

 

コメント

タイトルとURLをコピーしました