Pythonの文字列の使い方をわかりやすく解説【連結・スライス・f文字列】

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型ですが、ageint型なので、このコードを実行するとエラーになります。

この場合は、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))
# 6

Pythonは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)
# True

innot inを使うと、文字列の中に特定の文字や単語が含まれているかを簡単に確認できます。

インデックスを使って文字列を取得する

インデックスを使って文字列から1文字を取得する

Pythonでは、文字列の各文字に位置を表す番号が割り当てられています。この番号をインデックスといいます。

例えば、"Python"の各文字には次のようなインデックスが割り当てられています。

文字       P  y  t  h  o  n
インデックス 0  1  2  3  4  5

Pythonのインデックスは0から始まります。

文字列の後ろに角括弧[]を書き、その中にインデックスを指定すると、特定の文字を取得できます。

word = "Python"

print(word[0])
# P

print(word[1])
# y

word[0]では先頭のPword[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])
# Pyt

word[: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

インデックス024の文字が取得されるため、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文字列といった基本的な操作から覚えておくとよいでしょう。

お読みいただきありがとうございました。

スポンサーリンク