Pythonで文字列を結合・連結する【+演算子, f文字列, joinの使い方】

Pythonで文字列を連結させる方法についてまとめます。

Pythonで文字列を結合・連結する【+演算子, f文字列, joinの使い方】

文字列の連結方法まとめ(急いでいる人向け)

  • 文字列同士の結合は+演算子
  • 数値と文字列の結合はf文字列
  • リストの要素を区切り文字を入れて結合するにはjoinメソッド
# 文字列と文字列の結合
s = "ABC" + "XYZ"
print(s)
# "ABCXYZ"

s1 = "ABC"
s2 = "XYZ"
s = s1 + s2
print(s)
# "ABCXYZ"


# 数値と文字列の結合
num1 = 30
num2 = 5
s = f"{num1}を{num2}で割ると、{int(num1/num2)}です"
print(s)
# 30を5で割ると、6です


# リストを区切り文字で連結
l = ['ABC', 'DEF', 'GHI']
s = ','.join(l)
print(s)
# ABC,DEF,GHI

文字列と文字列の結合・連結(+演算子, +=演算子)

Pythonで、複数の文字列リテラル("・・・"'・・・')を結合・連結するには、+演算子と+=演算子を使います。

たとえば、文字列 "abc""def" を結合して、新しい文字列 "abcdef" を作成するには、次のようにします。文字列リテラル同士や、変数に格納した文字列との連結が可能です。

# 文字列リテラル同士を結合する
s = "abc" + "def"
print(s)
# abcdef


# 変数に入れても結合できる
s1 = "abc"
s2 = "def"
s = s1 + s2
print(s)
# abcdef


# 文字列リテラルと変数の結合もできる
s = s1 + "def"
print(s)
# abcdef

文字列を結合するには、+= 演算子を使用することもできます。+= 演算子は、左辺の変数に右辺の値を加算するという意味です。文字列の場合は、文字列を連結することになります。

たとえば、文字列 "abc" を変数 s に代入し、文字列 "def" を変数 s に連結するには、次のようにします。

# +=演算子で文字列を結合する
s = "abc"
s += "def"
print(s)
# abcdef


# 文字列変数を結合することもできる
s1 = "abc"
s2 = "def"
s1 += s2
print(s1)
# abcdef

ちなみに、文字列リテラルを連続して記述することでも、文字列を連結させることができます。この書き方は、文字列リテラルだけの書き方で、文字列変数ではエラーが出てしまいます。

s = "abc""def""ghi"
print(s)
# abcdefghi

# スペースを空けたり、改行しても大丈夫
s = "abc" "def" "ghi"
print(s)
# abcdefghi

s = "abc"\
    "def"\
    "ghi"
print(s)
# abcdefghi

数値と文字列の結合・連結(f文字列, format)

Pythonでは、異なる型の+演算子での結合はエラーになります。そのため、数値と文字列を結合するには、str()関数で数値を文字列型に変換してから+演算子などを使用します。

s1 = "abc"
int1 = 500
float1 = 10.0

s = s1 + str(int1) + str(float1)
# abc50010.0

数値の書式を設定したい場合には、フォーマット済み文字列リテラル(f文字列)か、str型のformat()メソッドを利用します。

フォーマット済み文字列リテラルとは、文字列リテラルの頭に fF を付けることで、文字列リテラル内に変数うなどを扱う式を埋め込むことができる構文のことです。埋め込む式は{式の内容}の形になります。

# フォーマット済み文字列リテラルで文字列と数値を結合
percentage = 70
format_s = f"明日の降水確率は{percentage}%です。"
print(format_s)
# 明日の降水確率は70%です


# 埋め込みする式の中で計算もできる
int1 = 10
int2 = 5
format_s = f"{int1}と{int2}を足すと、{int1+int2}になります。"
print(format_s)
# 10と5を足すと、15になります。

数値や変数を扱って文字列と結合するには、フォーマット済み文字列リテラルが一番直感的に書くことができると思います。

また、str型のformat()メソッドの記法は以下のとおりです。

# str型のformatメソッド
percentage = 70
s = "明日の降水確率は{}%です。".format(percentage)
print(s)
# 明日の降水確率は70%です


# 複数の引数を持つことも可能
int1 = 10
int2 = 5
s = "{}と{}を足すと、{}になります。".format(int1, int2, int1+int2)
print(s)
# 10と5を足すと、15になります。

改行を入れて文字列を結合・連結する

改行をしながら文字列を結合する場合は、改行を表す特殊文字 \n を使用します。

たとえば、文字列 "abc" を改行して、文字列 "def" を続けるには、次のようにします。

# 改行をしながら文字列を連結する
s1 = "abc"
s2 = "def"
s = s1 + "\n" + s2
print(s)
# abc
# def

また、文字列自体を複数行に渡って記述する場合は、文字列リテラルを3つのクォートで囲みます。

たとえば、文字列 "abc" を改行して、文字列 "def" を続けるには、次のようにします。

# 複数行に渡って文字列を記述すると、改行も認識される
s = """abc
def"""

print(s)
# abc
# def

以上のように、改行して文字列を結合する場合は、改行を表す特殊文字 \n を使用するか、文字列リテラルを3つのクォートで囲むことで実現できます。

リストの各要素を任意の区切り文字で結合させる(join)

str型のjoin()メソッドを利用すると、文字列を含むリスト(配列)からそれぞれの要素を取り出して、一つの文字列として連結させることができます。文字列を連結させる際には、間に入る区切り文字を指定することができます。

書式は、'区切り文字'.join([連結させる文字列のリスト])の形になります。

str_list = ['abc', 'def', 'ghi']

# ハイフンで繋げる
s = '-'.join(str_list)
print(s)
# abc-def-ghi

# スペースで繋げる
s = ' '.join(str_list)
print(s)
# abc def ghi

# 改行して繋げる
s = '\n'.join(str_list)
print(s)
# abc
# def
# ghi

文字列ではなく、数値などを含むリストの場合には、通常の連結方法と同様にstr()関数で文字列に変換してからjoin()メソッドを使用します。リストのそれぞれの要素にstr()関数を適用するには、リスト内包表記が便利です。

num_list = [123, 456, 789]
str_num_list = [str(i) for i in num_list] # リスト内包表記
s = '-'.join(str_num_list)
print(s)
# 123-456-789

ちなみに、str型のjoin()メソッドは、リストだけではなく、タプルのようなその他のPythonのイテラブルオブジェクトにも使用することができます。

また、join()の逆で、特定の区切り文字をもとに文字列を分解してリストを作成するにはsplit()メソッドを利用します。

文字列を繰り返して結合・連結する(*演算子)

同じ文字列を指定の回数分繰り返して連結させ、新しい文字列とする場合には、*演算子を使います。

# 同じ文字列を10回繰り返す
greeting = "Hi!"
repeat_greeting = greeting * 10
print(repeat_greeting)
# Hi!Hi!Hi!Hi!Hi!Hi!Hi!Hi!Hi!Hi!