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

こんにちは。キノコードです。
この動画では、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桁で表示されました。