【Python入門・応用講座】13.文字列|結合や分割、検索、置換、formatメソッドの使い方を解説(初心者にもわかりやすく)

【Python入門・応用講座】13.文字列サムネイル
Python入門・応用講座

こんにちは。キノコードです。
この動画では、Pythonの文字列について説明します。

この記事の執筆・監修

キノコード
キノコード    

テクノロジーアンドデザインカンパニー株式会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付くPythonによる自動化仕事術」や、雑誌「日経ソフトウエア」や「シェルスクリプトマガジン」への寄稿など実績多数。

文字列とは

文字列とは、文字や記号が連なったものです。
Pythonでは、シングルクォーテーションやダブルクォーテーション、str関数で囲まれた文字や記号を文字列として扱います。
確認してみましょう。

a = 'abcde'
b = "あいうえお"
c = str(12345)

print(a, type(a))
print(b, type(b))
print(c, type(c))

シングルクォーテーション、ダブルクォーテーション、str関数を用いて、英語、日本語、数値の文字列を作成し、それぞれ変数に代入します。
これらの変数をデータ型と一緒に表示させてみましょう。
実行します。
表示されました。
全て文字列を表すstr型となっていることがわかります。

また、文字列のそれぞれの文字にはインデックスが振られています。

a = 'abcde'
b = "あいうえお"
c = str(12345)

print(a[0])
print(b[0])
print(c[0])

インデックスを指定して、先ほどの変数の中の最初の文字を抽出してみましょう。
実行します。
最初の文字を抽出できました。

文字列の結合

次に、文字列を結合する方法を説明します。
文字列と文字列の間に、+(プラス)を書くと、文字列を結合できます。
足し算のようなイメージです。

x = "aaa" + "bbb"

print(x)

文字列aaaと文字列bbbを結合してみましょう。
実行します。
aaaとbbbを結合できました。

また、文字列の後ろに*(アスタリスク)、そして数値を書くと、数値の回数ぶん文字列を繰り返して結合できます。
掛け算のようなイメージです。

x = 'abc' * 5

print(x)

文字列abcを5回繰り返して結合してみましょう。
実行します。
abcを5回繰り返して結合できました。

更に、文字列のjoinメソッドを使用して文字列を結合することもできます。

x = "-".join(["a", "b", "c"])

print(x)

結合の区切り文字としたい文字列をクオーテーションで囲み、その文字列のjoinメソッドを使用します。
引数に結合したい文字列を列挙したリストやタプルを指定します。
文字列-(ハイフン)を区切り文字として、文字列のaとbとcを結合してみましょう。
実行します。
-(ハイフン)を区切り文字として、aとbとcを結合できました。

なお、これらの結合方法は文字列にしか使えません。
そのため、例えば文字列と数値を結合しようとするとエラーになります。
確認してみましょう。

x = "123" + 456

print(x)

文字列の123と数値の456を結合してみます。
実行します。
このように、エラーが発生します。
数値を文字列として結合したい場合は、数値をクォーテーションで囲むか、str関数を用いて文字列に変換します。

x = "123" + "456"

print(x)

今度は数値の456をクォーテーションで囲み、文字列に変換してから結合してみましょう。
実行します。
文字列として結合できました。

文字列の分割

次に、文字列を分割する方法について説明します。
文字列のsplitメソッドを使用すると、文字列を分割し、分割した文字列を要素に持つリストが返ってきます。
具体例で確認してみましょう。

x = "I study Python"
a = x.split()

print(a)

「I study Python」という文字列を変数xに代入します。
このxのsplitメソッドを記述し、変数aに代入します。
splitメソッドは、デフォルトでは半角スペースを区切り文字として文字列を分割します。
結果を確認してみましょう。
実行します。
文字列が半角スペースで分割され、「I」と「study」と「Python」を要素に持つリストが表示されました。

今度は単語間を半角スペースではなく、ハイフンで繋いだ文字列を分割してみましょう。

x = "I-study-Python"
a = x.split(sep="-")

print(a)

文字列を変数xに代入します。
このxのsplitメソッドを書き、変数aに代入します。
splitメソッドの引数sepに文字列を指定すると、指定した文字を区切り文字として文字列を分割します。
今回は引数sepに-(ハイフン)を指定します。
結果を確認してみましょう。
実行します。
文字列がハイフンで分割され、先ほどと同様に「I」と「study」と「Python」を要素に持つリストが表示されました。

文字列の検索

次に、文字列を検索する方法について説明します。
in演算子を使用すると、文字列の中に特定の文字が含まれているかどうか確認できます。
含まれている場合はTrue、含まれていない場合はFalseが返ってきます。
具体例で確認してみましょう。

x = "I study Python"

print("s" in x)

「I study Python」という文字列を変数xに代入します。
この文字列の中に「s」という文字が含まれているかどうかをin演算子で判定し、結果を表示してみましょう。
実行します。
変数xの中に「s」という文字が含まれているため、Trueが表示されました。

また、1つの文字だけでなく、連続した文字列を検索することもできます。

x = "I study Python"

print("study" in x)
print("python" in x)

今度は「study」という文字列がxに含まれているかどうか確認してみましょう。
更に、全て小文字の「python」という文字列がxに含まれているかどうかも確認してみましょう。
実行します。
TrueとFalseが表示されました。
「study」という文字列はxに含まれているのでTrueが返ってきます。
全て小文字の「python」はxに含まれていないのでFalseが返ってきます。
このように、大文字と小文字は区別して判定されるので注意しましょう。

また、文字列のfindメソッドを使用すると、指定した文字のインデックス番号が返ってきます。
文字列に含まれない場合は-1が返ってきます。
具体例で確認してみましょう。

x = "I study Python"
a = x.find("s")

print(a)

先ほどと同じ「I study Python」という文字列を変数xに代入します。
このxのfindメソッドを書き、変数aに代入します。
今回はfindメソッドの引数に「s」を指定します。
結果を確認してみましょう。
実行します。
「s」のインデックス番号である2が表示されました。
なお、半角スペースも文字として認識されます。

in演算子を使う場合と同様に、連続した文字列を検索することもできます。
その場合、連続した文字列のうち最小のインデックス番号が返ってきます。

x = "I study Python"
a1 = x.find("study")
a2 = x.find("python")

print(a1)
print(a2)

「study」という文字列と全て小文字の「python」という文字列のインデックス番号を確認してみましょう。
実行します。
2と-1が表示されました。
「study」という文字列の最小のインデックス番号は「s」の2なので、2が返ってきます。
「python」という文字列は含まれないので、-1が返ってきます。

文字列の置換

次に、文字列を置換する方法について説明します。
文字列のreplaceメソッドを使用すると、文字列の一部を任意の文字列に置換できます。
replaceメソッドの引数には、置換したい文字列と置換後の文字列を指定します。
具体例で確認してみましょう。

x = "I study Python"
a = x.replace("Python", "Ruby")

print(a)

先ほどと同じ「I study Python」という文字列を変数xに代入します。
このxのreplaceメソッドを書き、変数aに代入します。
今回はreplaceメソッドの引数にPythonとRubyを指定します。
結果を確認してみましょう。
実行します。
「Python」が「Ruby」に置換されました。

また、置換後の文字列に空の文字列を指定すると、置換したい文字列が削除されます。

x = "I study Python"
a = x.replace(" ", "")

print(a)

先ほどの文字列の半角スペースを空の文字列で置換してみましょう。
実行します。
半角スペースが削除されました。

変数を含む文字列

最後に、変数を含む文字列について説明します。
クォーテーションで囲まれた文字は文字列として扱われるため、クォーテーションの中に変数を書いても、文字列として認識されてしまいます。
文字列の中で変数を呼び出したい場合は、文字列のformatメソッドや、フォーマット済み文字列を使います。
最初に、formatメソッドを使用する方法を説明します。
まず、クォーテーションの中に文字列を書き、変数を呼び出したい位置に波括弧を書きます。
その文字列のformatメソッドを書き、引数に呼び出したい変数を指定します。
具体例で確認してみましょう。

x = 3

print("1 + 2 = {}".format(x))

まず、変数xに3を代入します。
この変数xを文字列の中で呼び出します。
1、+、2、=、波括弧、をクォーテーションで囲み、文字列として書きます。
この文字列のformatメソッドを書き、引数にxを指定します。
print関数でこの結果を表示してみましょう。
実行します。
変数xが文字列に変換され、「1 + 2 = 3」という文字列が表示されました。
このように、formatメソッドを使うと、変数を含んだ文字列を表示できます。

また、formatメソッドの引数には計算式なども指定できます。

print("1 + 2 = {}".format(1 + 2))

今度はformatメソッドの引数に「1 + 2」という計算式を指定します。
実行します。
「1 + 2」の計算結果である3が呼び出され、先ほどと同様に「1 + 2 = 3」という文字列が表示されました。

また、文字列の中の波括弧は複数個使うこともできます。
今度は「1 + 2 = 3」という計算式の数字を全て波括弧にしてみましょう。

x = 1
y = 2

print("{} + {} = {}".format(x, y, x + y))

まず、変数xに1を代入し、yに2を代入します。
次に、変数を呼び出したい位置を全て波括弧で書きます。
そして、formatメソッドの引数に呼び出したい変数や式を指定します。
このとき、波括弧の順番と指定した引数の順番は一致します。
結果を確認してみましょう。
実行します。
最初の波括弧にxが入り、次の波括弧にyが入り、最後の波括弧にx+yの計算結果が入ります。
結果として「1 + 2 = 3」という文字列が表示されます。

なお、波括弧の順番と指定した引数の順番を変えることもできます。

x = 1
y = 2

print("{1} + {0} = {2}".format(x, y, x + y))

波括弧の中に数値を書くと、呼び出す引数の順番を変えられます。
数値は0から始まります。
波括弧の中に数値を書き、呼び出す引数の順番を変えて表示してみましょう。
実行します。
「2 + 1 = 3」と表示されました。
最初の波括弧にyが入り、次の波括弧にxが入り、最後の波括弧にx+yの計算結果が入っていることがわかります。

他にも、キーワード引数という形式を使う方法もあります。
キーワード引数は順番ではなく、名前で引数を指定する形式です。
キーワード引数を使う場合は、波括弧の中に名前を書き、formatメソッドの中でその名前に変数や式を代入します。
具体例で確認してみましょう。

x = 1
y = 2

print("{B} + {A} = {result}".format(A = x, B = y, result = x + y))

波括弧の中にB、A、resultという名前を書きます。
formatメソッドの中でAにxを代入し、Bにyを代入し、resultにx+yを代入します。
結果を確認してみましょう。
実行します。
Bの位置にyが入り、Aの位置にxが入り、resultの位置にx+yの計算結果が入り、先ほどと同様に「2 + 1 = 3」と表示されていることがわかります。
なお、このA、B、resultのように引数を呼び出す位置を示す名前のことを借引数、x、y、x+yのように実際に渡す値のことを実引数と呼びます。

更に、呼び出す変数の書式を指定することもできます。
波括弧の中に:(コロン)を書き、その後に書式を指定します。
具体例で確認してみましょう。

x = 1
y = 2

print("{} ÷ {} = {:.2f}".format(x, y, x / y))

例えば「1 ÷ 2」の計算式とその計算結果を小数点以下2桁で表し、文字列として表示してみます。
少数点以下2桁で表示したい場合は:(コロン)の後に.(ドット)、2、fと書きます。
こうすることで、少数第3位が四捨五入され、小数点以下2桁で表示されます。
.(ドット)、2が少数点以下2桁を表し、fが少数表示を表します。
確認してみましょう。
実行します。
「1 ÷ 2 = 0.50」と表示されました。
計算結果が小数点以下2桁で表示されているのがわかります。

次に、フォーマット済み文字列を使用する方法を説明します。
フォーマット文字列はPython3.6から導入された記法です。
フォーマット文字列は文字列のクォーテーションの前に小文字または大文字のfを書くことで定義されます。
使い方はformatメソッドと似ています。
まず、文字列のクォーテーションの前にfを書きます。
そして、変数を呼び出したい位置に波括弧を書き、その中に変数をそのまま書きます。
これで完成です。
具体例で確認してみましょう。

x = 1
y = 2

print(f"{x} ÷ {y} = {x / y}")

先ほどと同様に、xに1を代入し、yに2を代入します。
このxとyを使って、「1 ÷ 2」の計算式とその計算結果を文字列として表示します。
クォーテーションの前にfを書きます。
そして変数や計算式を呼び出したい位置に波括弧を書き、その中にx、y、x/yと書きます。
これで完成です。
結果を確認してみましょう。
実行します。
「1 ÷ 2 = 0.5」と表示されました。
書き方はformatメソッドと似ていますが、変数をメソッドの引数に指定するのではなく、波括弧の中に直接書きます。

また、フォーマット文字列と同様に、変数の書式を設定することもできます。
先ほどの計算結果を少数点以下2桁で表してみましょう。

x = 1
y = 2

print(f"{x} ÷ {y} = {x / y:.2f}")

書き方はformatメソッドの時と同じです。
波括弧の中の変数や式の後に:(コロン)を書き、その後ろに.(ドット)、2、fと書きます。
確認してみましょう。
実行します。
計算結果が小数点以下2桁で表示されました。

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト