【Python】文字列を連結・結合する方法

Python で文字列を連結・結合する方法について解説します。
目次
文字列を連結・結合する方法
プログラミングでは、文字列の扱いは非常に重要です。文字列操作の中でも、文字列を連結・結合する場面には頻繁に直面します。
この記事では、Python で文字列を連結・結合する方法について紹介します。
文字列を連結・結合する
複数の文字列を連結・結合する方法
複数の文字列を連結・結合する場合には「+ 演算子」「+= 演算子」「文字列リテラルの列挙」という方法があります。
s1 = "a" s2 = "b" s3 = "c" # +演算子で文字列を連結・結合する temp_str = s1 + s2 + s3 print(temp_str) # +=演算子で文字列を連結・結合する s4 = "d" temp_str += s4 print(temp_str) # 文字列リテラルを連続して列挙して連結・結合する temp_str = "e" "f" "g" print(temp_str)
【実行結果】 abc abcd efg
例のように複数文字列を + 演算子や += 演算子によって連結・結合できます。また、文字列リテラルを単純に並べるだけでも連結・結合が可能です。文字列リテラルの列挙の場合は、間にスペースやバックスラッシュによる改行があっても問題ありません。
数値と文字列を連結・結合する方法
数値と文字列を連結・結合する場合には、型が異なるため単純に + 演算子は適用できません。そのまま連結・結合しようとすると TypeError エラーとなります。
s1 = "a" n1 = 100 # そのまま連結・結合しようとするとエラーとなる temp_str = s1 + "_" + n1 print(temp_str)
【実行結果】 TypeError: can only concatenate str (not "int") to str
このエラーを解決するには、以下のように型を揃えて実行します。
s1 = "a"
n1 = 100
# +演算子で文字列と数値を連結・結合する
temp_str = s1 + "_" + str(n1)
print(temp_str)
# +=演算子で文字列を連結・結合する
n2 = 0.01
temp_str += "_"
temp_str += str(n2)
print(temp_str)
# formatを使用して連結・結合する
temp_str = "{}_{}".format(s1, n1)
print(temp_str)
# f-stringを使用して連結・結合する
temp_str = f"{s1}_{n1:05}_{n2:.5f}"
print(temp_str)【実行結果】 a_100 a_100_0.01 a_100 a_00100_0.01000
例では、str を使うことで数値を文字列に変換してから + 演算子等を使うことで数値と文字列を結合しています。
また、format や f-string を使用して連結することで数値のフォーマットを変えつつ結合するも可能です。format や f-string については「文字列のフォーマットを整える方法」を参考にしてください。
リストを連結・結合して文字列にする方法
リストの文字列や数値を連結・結合して文字列にする場合には、str の join メソッドを使用します。join は、非常に効率的な連結・結合方法で Python では頻繁に用います。特に、多くの文字列を連結・結合する場合には効果的です。
文字列のリストを文字列に連結・結合する方法
join メソッドで文字列のリストを連結・結合する場合は以下のようにします。
sample_list = ["Pytho", "Java", "Go", "C", "C#"]
# 文字列をそのまま結合
print("".join(sample_list))
# 区切り文字でjoinで結合
print(",".join(sample_list))【実行結果】 PythoJavaGoCC# Pytho,Java,Go,C,C#
文字列を単純につなげたい場合は、空文字 ("") の join メソッドに連結・結合したい対象リストを渡すことで結合できます。
区切り文字を指定する場合は、区切り文字の文字列の join メソッドに結合対象リストを渡します。例えば、"," (カンマ) を区切り文字として結合したい場合は「",".join(sample_list)」とします。もちろん他の区切り文字も使用できます。
数値リストを文字列に連結・結合する方法
数値リストに対して単純に join を適用してしまうと TypeError となります。
sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 数値リストをjoinでそのまま連結することはできない
print(",".join(sample_list))【実行結果】 TypeError: sequence item 0: expected str instance, int found
数値リストを join で結合する場合には、以下のように数値リストを str で文字列に変換してから join メソッドに渡します。
sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 数値リストをjoinで結合する場合はstrに変換してからjoinに渡す
print(",".join([str(i) for i in sample_list]))【実行結果】 1,2,3,4,5,6,7,8,9,10
例のようにリスト内包表記を使ってまとめて作成すると簡単です。リスト内包表記については「リスト(list)内包表記の使い方」を参考にしてください。
異なる型のオブジェクトを含むリストを文字列に連結・結合する方法
上記では、文字列だけ含むリスト、数値だけ含むリストを中心に扱ってきましたが、Python では異なる型のオブジェクトを含むリストを扱うことが可能です。
ほとんどの型は str により文字列に変換できるため、上記の数値の結合で使用した実装方法は、以下のようにすると異なる型のオブジェクトを含むリストに適用できます。
class CustomClass1:
pass
class CustomClass2:
def __init__(self, value):
self.value = value
def __str__(self):
return f"<CustomClass2 value={self.value}>"
# 様々な型が混在している場合
sample_list = [1, 2, "a", "b", CustomClass1(), CustomClass2(123), 8.0, 9.0]
# strで文字列に変換ができれば結合可能
print(",".join([str(i) for i in sample_list]))【実行結果例】 1,2,a,b,<__main__.CustomClass1 object at 0x00000249B9E5A190>,<CustomClass2 value=123>,8.0,9.0
sample_list は、複数の型のオブジェクトを含んでいます。開発者が定義したようなカスタムクラスでも、自動的に __str__ メソッドが提供されるため CustomClass1 クラスに str を適用した場合は「<main.CustomClass1 object at 0x00000249B9E5A190>」のような文字列で表示され、基本的には問題は起こりません。
また、CustomClass2 では、開発者が __str__ メソッドを個別にオーバーライドして定義しています。例では文字列を適切に返却しているので問題は起こりませんが、仮に None のようなコードを書いてしまうと TypeError が発生するので注意してください。
異なる型を含むリストを扱う場合には、型チェックや例外処理を十分意識する必要があります。また、__str__ を個別実装するような場合には、None を返してしまったり、予期しない例外を発生させないように十分注意し、利用者に伝わりやすい簡潔な文字列表現を返却するように十分検討するようにしてください。
まとめ
Python で文字列を連結・結合する方法について解説しました。
+ 演算子や += 演算子を使って単純に連結・結合する方法や join メソッドについて例を使って使い方を説明しました。
少ない数の連結・結合では、+ 演算子や += 演算子を使った方が可読性も高く、適していますが、数が多くなる場合にはより効率的に処理が可能な join メソッドを使用することを検討してください。
文字列の連結・結合はプログラミングにおいては頻繁に出てきます。使い方をしっかり覚えて効率よく文字列の連結・結合をしてもらえればと思います。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。







