Pythonでは、名前やメッセージなどの文字を扱うときに「文字列」を使用します。
例えば、"Python"や"Hello"、"こんにちは"などは、すべて文字列です。
また、Pythonでは文字列を作るだけでなく、文字列同士をつなげたり、一部分を取り出したり、文字列の中に変数の値を埋め込んだりできます。
この記事では、Pythonの文字列とは何なのか、基本的な書き方や文字列の連結、インデックス、スライス、文字列のフォーマットについて、わかりやすく解説します。
Pythonの文字列とは?
Pythonでは、文字の並びを文字列(string)として扱います。
文字列は、ダブルクォーテーション"またはシングルクォーテーション'で囲んで記述します。
text = "Python"
print(text)
# Python"Python"のように、クォーテーションで囲まれた部分が文字列です。
Pythonでは、文字列の型はstr型です。type関数を使うと、値の型を確認できます。
text = "Python"
print(type(text))
# <class 'str'>strは「string(文字列)」を表しています。
文字列の基本的な書き方
文字列は、シングルクォーテーション'またはダブルクォーテーション"で囲んで作成します。
text1 = 'Python'
text2 = "Hello"
print(text1)
# Python
print(text2)
# Hello基本的には、シングルクォーテーションでもダブルクォーテーションでも同じように文字列を作成できます。
text1 = 'Python'
text2 = "Python"
print(text1 == text2)
# Trueどちらを使っても問題ありませんが、プログラムの中では書き方をある程度統一しておくと読みやすくなります。
文字列の中にクォーテーションを書く
文字列の中にシングルクォーテーション'を含めたい場合は、外側をダブルクォーテーション"にすると簡単です。
text = "It's Python."
print(text)
# It's Python.反対に、文字列の中にダブルクォーテーション"を含めたい場合は、外側をシングルクォーテーション'にできます。
text = 'He said "Hello".'
print(text)
# He said "Hello".エスケープシーケンスを使う
Pythonでは、バックスラッシュ\から始まる特殊な記述を使うことがあります。これをエスケープシーケンスといいます。
よく使われるエスケープシーケンスは次のとおりです。
| 記述 | 意味 |
|---|---|
\n | 改行 |
\t | タブ |
\\ | バックスラッシュ |
\" | ダブルクォーテーション |
\' | シングルクォーテーション |
例えば、文字列を囲んでいるものと同じクォーテーションを文字列の中で使用したい場合は、\を付けます。
text = 'It\'s Python.'
print(text)
# It's Python.ダブルクォーテーションも同じように記述できます。
text = "I like \"Python\""
print(text)
# I like "Python"文字列の途中で改行する
文字列の途中で改行したい場合は、改行を表す\nを使います。
text = "Apple\nOrange\nBanana"
print(text)実行結果は次のようになります。
Apple
Orange
Banana\nが記述されている位置で改行されます。
raw文字列でバックスラッシュをそのまま扱う
文字列の先頭にrまたはRを付けると、バックスラッシュ\を基本的にそのままの文字として扱うことができます。このような文字列をraw文字列(raw string)といいます。
text = r"Hello\nPython"
print(text)
# Hello\nPython通常の文字列では\nは改行として扱われますが、raw文字列では\nという文字列のまま扱われます。
Windowsのファイルパスや正規表現など、バックスラッシュを多く使う文字列を記述するときに便利です。
path = r"C:\Users\Taro\Documents"
print(path)
# C:\Users\Taro\Documentsただし、raw文字列にはいくつか制約があり、文字列の末尾を1つのバックスラッシュ\で終わらせることはできません。
例えば、次のような書き方はエラーになります。
path = r"C:\Users\Taro\"最後の\によって、文字列の終わりを表す"が正しく認識されなくなるためです。
文字列の最後に\を付けたい場合は、通常の文字列を使って次のように記述できます。
path = "C:\\Users\\Taro\\"
print(path)
# C:\Users\Taro\複数行の文字列を書く
複数行にわたる文字列を書く場合は、3つのダブルクォーテーション"""または3つのシングルクォーテーション'''で囲む方法もあります。
text = """Apple
Orange
Banana"""
print(text)実行結果は次のとおりです。
Apple
Orange
Banana長いメッセージや複数行の文章を、そのままの形で記述したい場合に便利です。
message = """ご登録ありがとうございます。
登録処理が完了しました。
引き続きサービスをご利用ください。"""
print(message)文字列の基本操作
文字列を連結する
Pythonでは、+演算子を使って文字列同士をつなげることができます。
text = "Hello" + " " + "Python"
print(text)
# Hello Pythonこのように、複数の文字列をつなげることを文字列の連結といいます。
変数に入っている文字列同士も連結できます。
first_name = "Taro"
last_name = "Yamada"
name = first_name + " " + last_name
print(name)
# Taro Yamada文字列と数値を連結する
文字列と数値を、そのまま+演算子で連結することはできません。
age = 20
print("年齢は" + age + "歳です")"年齢は"はstr型ですが、ageはint型なので、このコードを実行するとエラーになります。
この場合は、str関数を使って数値を文字列に変換できます。
age = 20
print("年齢は" + str(age) + "歳です")
# 年齢は20歳ですただし、文字列の中に変数の値を埋め込む場合は、後ほど紹介するf文字列を使うとより簡単に書けます。
文字列を繰り返す
*演算子を使うと、同じ文字列を指定した回数だけ繰り返すことができます。
text = "Hello " * 3
print(text)
# Hello Hello Hello 例えば、同じ記号を繰り返して区切り線を作ることもできます。
line = "-" * 20
print(line)
# --------------------文字列の長さを取得する
文字列に何文字含まれているのかを調べたい場合は、len関数を使用します。
word = "Python"
print(len(word))
# 6Pythonは6文字なので、6が返されます。
日本語の文字列でも同じように使用できます。
text = "こんにちは"
print(len(text))
# 5文字列が含まれているか確認する
文字列の中に、特定の文字列が含まれているか確認したい場合は、in演算子を使用します。
text = "Hello Python"
print("Python" in text)
# True"Hello Python"の中には"Python"が含まれているため、Trueが返されます。
含まれていない場合は、Falseが返されます。
text = "Hello Python"
print("Java" in text)
# False反対に、特定の文字列が含まれていないことを確認したい場合は、not inを使用できます。
text = "Hello Python"
print("Java" not in text)
# Trueinやnot inを使うと、文字列の中に特定の文字や単語が含まれているかを簡単に確認できます。
インデックスを使って文字列を取得する
インデックスを使って文字列から1文字を取得する
Pythonでは、文字列の各文字に位置を表す番号が割り当てられています。この番号をインデックスといいます。
例えば、"Python"の各文字には次のようなインデックスが割り当てられています。
文字 P y t h o n
インデックス 0 1 2 3 4 5Pythonのインデックスは0から始まります。
文字列の後ろに角括弧[]を書き、その中にインデックスを指定すると、特定の文字を取得できます。
word = "Python"
print(word[0])
# P
print(word[1])
# yword[0]では先頭のP、word[1]では2文字目のyを取得しています。
負のインデックスで後ろから文字を取得する
Pythonでは、負のインデックスを使って、文字列の後ろから文字を取得することもできます。
文字 P y t h o n
正の位置 0 1 2 3 4 5
負の位置 -6 -5 -4 -3 -2 -1最後の文字を取得する場合は、-1を指定します。
word = "Python"
print(word[-1])
# n
print(word[-2])
# o最後の文字を取得したい場合に、文字列の長さを調べる必要がないため便利です。
存在しないインデックスを指定するとエラーになる
文字列の範囲を超えたインデックスを指定すると、IndexErrorが発生します。
word = "Python"
print(word[10])実行すると、次のようなエラーになります。
IndexError: string index out of range"Python"にはインデックス10の文字が存在しないためです。
スライスで文字列の一部分を取得する
文字列から複数の文字をまとめて取り出したい場合は、スライスを使用します。
基本的な書き方は次のとおりです。
文字列[開始位置:終了位置]例えば、"Python"から先頭の3文字を取り出す場合は、次のようにします。
word = "Python"
print(word[0:3])
# Pytここで重要なのは、終了位置の文字は取得する範囲に含まれないという点です。
0 → P
1 → y
2 → t
3 → h ← 含まれないそのため、word[0:3]ではPytが取得されます。
開始位置を省略する
開始位置を省略すると、文字列の先頭から指定した位置の直前までを取得します。
word = "Python"
print(word[:3])
# Pytword[:3]は、word[0:3]と同じ結果になります。
終了位置を省略する
終了位置を省略すると、指定した位置から文字列の最後までを取得します。
word = "Python"
print(word[3:])
# hon開始位置と終了位置を省略する
開始位置と終了位置をどちらも省略すると、文字列全体を取得できます。
word = "Python"
print(word[:])
# Python負のインデックスでスライスする
スライスでも負のインデックスを使用できます。
例えば、文字列の最後の3文字を取得する場合は、次のようにします。
word = "Python"
print(word[-3:])
# honスライスのステップを指定する
スライスには、開始位置と終了位置に加えて「何文字おきに取得するか」を表すステップも指定できます。
文字列[開始位置:終了位置:ステップ]例えば、1文字おきに取得する場合は、ステップに2を指定します。
word = "Python"
print(word[::2])
# Ptoインデックス0、2、4の文字が取得されるため、Ptoになります。
文字列を逆順にする
ステップに-1を指定すると、文字列を後ろから順番に取得できます。
word = "Python"
print(word[::-1])
# nohtyPこの書き方を使うと、文字列を簡単に逆順にできます。
Pythonの文字列は変更できない
Pythonの文字列には、作成した文字列の一部分を直接変更できないという特徴があります。
このような性質をイミュータブル(immutable)といいます。
例えば、次のように先頭の文字だけを変更することはできません。
word = "Python"
word[0] = "J"実行すると、次のようなエラーになります。
TypeError: 'str' object does not support item assignment文字列の一部分を変えたい場合は、元の文字列を直接変更するのではなく、新しい文字列を作成します。
word = "Python"
new_word = "J" + word[1:]
print(new_word)
# Jython文字列に変数の値を埋め込む
実際のプログラムでは、文字列の一部分に変数の値を埋め込んで表示することがよくあります。
Pythonには、文字列に値を埋め込む代表的な方法として、次の3つがあります。
%演算子を使う方法formatメソッドを使う方法- f文字列(f-string)を使う方法
%演算子を使って文字列に値を埋め込む
Pythonでは、%演算子を使って文字列の中に値を埋め込む方法があります。
name = "Taro"
print("My name is %s." % name)
# My name is Taro.%sの部分に、変数nameの値が埋め込まれます。
代表的な書式指定は次のとおりです。
| 書式 | 主な用途 |
|---|---|
%s | 文字列として表示する |
%d | 整数形式で表示する |
%f | 浮動小数点数として表示する |
例えば、整数を埋め込む場合は次のようにします。
age = 20
print("I am %d years old." % age)
# I am 20 years old.小数点以下の桁数を指定することもできます。
price = 123.456
print("Price: %.2f" % price)
# Price: 123.46%.2fでは、小数点以下を2桁で表示しています。
%を使った書き方は古くからある方法なので、既存のPythonコードで見かけることがあります。
formatメソッドで文字列に値を埋め込む
formatメソッドを使って文字列に値を埋め込むこともできます。
文字列の中に{}を書き、formatメソッドに埋め込みたい値を指定します。
name = "Taro"
text = "My name is {}.".format(name)
print(text)
# My name is Taro.{}の部分が、formatメソッドに指定した値に置き換わります。
複数の値を埋め込む
複数の{}を記述すると、複数の値を埋め込むことができます。
name = "Taro"
age = 20
text = "My name is {}. I am {} years old.".format(name, age)
print(text)
# My name is Taro. I am 20 years old.値は、左側の{}から順番に埋め込まれます。
埋め込む値の位置を指定する
{0}や{1}のように、埋め込む値の位置を指定することもできます。
text = "{0} likes {1}.".format("Taro", "Python")
print(text)
# Taro likes Python.{0}にはformatメソッドの1番目の値、{1}には2番目の値が入ります。
位置を指定しているため、順番を入れ替えることもできます。
text = "{1} is used by {0}.".format("Taro", "Python")
print(text)
# Python is used by Taro.名前を付けて値を指定する
formatメソッドでは、{name}のように名前を付けて値を指定することもできます。
text = "My name is {name}. I am {age} years old.".format(
name="Taro",
age=20
)
print(text)
# My name is Taro. I am 20 years old.埋め込む値が増えた場合でも、どの値を使用しているのか分かりやすくなります。
f文字列で文字列に値を埋め込む
Pythonでは、文字列に変数の値を埋め込む方法としてf文字列(f-string)もよく使われます。
文字列の先頭にfを付け、文字列の中の{}に変数を記述します。
name = "Taro"
text = f"My name is {name}."
print(text)
# My name is Taro.複数の値も簡単に埋め込めます。
name = "Taro"
age = 20
text = f"My name is {name}. I am {age} years old."
print(text)
# My name is Taro. I am 20 years old.formatメソッドと比べても短く直感的に書けるため、新しくコードを書く場合はf文字列を使うと分かりやすいでしょう。
f文字列で数値の表示形式を指定する
f文字列では、単に値を埋め込むだけでなく、数値の表示形式を指定することもできます。
例えば、小数点以下を2桁まで表示する場合は、.2fを指定します。
price = 123.456
print(f"{price:.2f}")
# 123.46また、整数に3桁ごとのカンマを付けることもできます。
price = 1234567
print(f"{price:,}")
# 1,234,567金額や計算結果を見やすく表示したい場合に便利です。
文字列のフォーマット方法を比較する
ここまで紹介した3つの方法を比較してみます。
name = "Taro"
# %演算子
print("Hello, %s!" % name)
# formatメソッド
print("Hello, {}!".format(name))
# f文字列
print(f"Hello, {name}!")どの方法でも、実行結果は次のようになります。
Hello, Taro!
Hello, Taro!
Hello, Taro!| 方法 | 例 | 特徴 |
|---|---|---|
%演算子 | "%s" % value | 古いPythonコードで見かけることがある |
formatメソッド | "{}".format(value) | 位置や名前を指定して値を埋め込める |
| f文字列 | f"{value}" | 短く直感的に記述できる |
既存のプログラムを読むために%演算子やformatメソッドの書き方も知っておくと便利ですが、これから新しくコードを書く場合は、基本的にはf文字列を覚えておくとよいでしょう。
文字列の基本操作をまとめて確認する
最後に、ここまで紹介した文字列の基本的な操作を簡単なプログラムで確認してみます。
language = "Python"
print(language)
# Python
print(len(language))
# 6
print(language[0])
# P
print(language[-1])
# n
print(language[:3])
# Pyt
print(language[3:])
# hon
print(language[::-1])
# nohtyPまずは、このあたりの基本的な操作を理解しておくと、Pythonで文字列を扱いやすくなります。
本記事のまとめ
この記事では「Pythonの文字列」について、以下の内容を説明しました。
- 文字列はダブルクォーテーション
"またはシングルクォーテーション'で囲んで記述する - Pythonの文字列は
str型として扱われる \nや\tなどのエスケープシーケンスを使用できる+演算子で文字列を連結し、*演算子で文字列を繰り返せるlen関数で文字列の長さを取得できる- インデックスを使うと、文字列から特定の1文字を取得できる
- 負のインデックスを使うと、文字列の後ろから文字を取得できる
- スライスを使うと、文字列の一部分をまとめて取得できる
- Pythonの文字列はイミュータブルであり、文字を直接変更できない
%演算子やformatメソッド、f文字列を使って文字列に値を埋め込めるstr関数を使って数値などを文字列に変換できる
Pythonでは文字列を扱う機会が非常に多いため、まずは文字列の作成・連結・インデックス・スライス・f文字列といった基本的な操作から覚えておくとよいでしょう。
お読みいただきありがとうございました。