Pythonでリストを扱っていると、複数の要素を一つの文字列にまとめたいことがあります。
例えば、リストに保存した商品名をカンマで区切って表示したり、数値の一覧をメッセージとして出力したりする場合です。
Pythonでリストを文字列に変換する主な方法は、次の3つです。
- 「join()」で要素をつなげる
- 「map()」で数値を文字列にしてからつなげる
- 「str()」でリスト全体をそのまま文字列にする
どの方法を使うかは、「どのような形の文字列が欲しいか」によって変わります。この記事では、それぞれの違いを初心者向けに分かりやすく解説します。
join()で文字列のリストをつなげる
文字列だけが入っているリストは、「join()」を使うと一つの文字列にまとめられます。
# 果物の名前を入れたリスト
fruits = ["りんご", "みかん", "バナナ"]
# カンマでつなげて一つの文字列にする
text = ",".join(fruits)
print(text) # りんご,みかん,バナナ「join()」では、つなぎ目に使う文字を先に指定します。
今回の「”,”」は、リストの要素をカンマで区切るという意味です。
区切り文字を変えると、表示結果も変わります。
fruits = ["りんご", "みかん", "バナナ"]
# 読点で区切る
text = "、".join(fruits)
print(text) # りんご、みかん、バナナ空文字を使えば、間に何も入れずにつなげることもできます。
characters = ["P", "y", "t", "h", "o", "n"]
# 区切り文字なしでつなげる
text = "".join(characters)
print(text) # Python「join()」は、リストを文章やCSV風のデータとして表示したい場合に便利です。
数値のリストはそのままjoin()できない
「join()」でつなげられるのは、基本的に文字列だけです。
そのため、次のような数値のリストを直接渡すとエラーになります。
numbers = [10, 20, 30]
# 数値はそのまま結合できない
text = ",".join(numbers)エラーになる理由は、リストの中にある「10」や「20」が文字列ではなく整数だからです。
数値をつなげたい場合は、最初に各要素を文字列へ変換します。
map()で数値を文字列に変換する
数値のリストを一つの文字列にまとめる場合は、「map()」と「str()」を組み合わせます。
# 数値のリスト
numbers = [10, 20, 30]
# 各数値を文字列に変換してからカンマでつなげる
text = ",".join(map(str, numbers))
print(text) # 10,20,30このコードは、次の順番で処理されています。
- 「map(str, numbers)」で各数値を文字列に変換する
- 「join()」で変換後の文字列をつなげる
処理のイメージは次のとおりです。
[10, 20, 30]
↓ 各要素を文字列に変換
["10", "20", "30"]
↓ カンマで結合
"10,20,30"最初は少し複雑に見えるかもしれません。その場合は、処理を二つに分けて書くと理解しやすくなります。
numbers = [10, 20, 30]
# 各数値を文字列に変換する
string_numbers = list(map(str, numbers))
# 変換した文字列をカンマでつなげる
text = ",".join(string_numbers)
print(string_numbers) # ['10', '20', '30']
print(text) # 10,20,30「変換してから、つなげる」と考えるのがポイントです。
リスト内包表記で変換する方法
「map()」の代わりに、リスト内包表記を使うこともできます。
numbers = [10, 20, 30]
# 各数値を文字列に変換する
string_numbers = [str(number) for number in numbers]
# カンマでつなげる
text = ",".join(string_numbers)
print(text) # 10,20,30結果は「map()」を使った場合と同じです。
リスト内包表記は、「リストの各要素に同じ処理を行い、新しいリストを作る」書き方です。
初心者のうちは、短さだけで選ぶ必要はありません。自分が処理の流れを読み取りやすい方法を使うとよいでしょう。
str()でリスト全体を文字列にする
リストの見た目を残したまま文字列にしたい場合は、「str()」を使います。
numbers = [10, 20, 30]
# リスト全体を文字列に変換する
text = str(numbers)
print(text) # [10, 20, 30]
print(type(text)) # <class 'str'>変換後の文字列には、角括弧やカンマも含まれています。
「join()」を使った場合との違いを比べてみましょう。
numbers = [10, 20, 30]
# 表示形式を比較する
joined_text = ",".join(map(str, numbers))
list_text = str(numbers)
print(joined_text) # 10,20,30
print(list_text) # [10, 20, 30]「join()」は要素を好きな区切り文字でつなげます。一方、「str()」はリスト全体の表現をそのまま文字列にします。
ログや動作確認のためにリストの内容を表示するなら「str()」、読みやすい文章や保存用データを作るなら「join()」が向いています。
リスト内の一部を文章に組み込む
リストを文字列へ変換する目的は、単にデータをつなげることだけではありません。文章の一部として使うこともできます。
items = ["りんご", "牛乳", "パン"]
# 商品名を読点でつなげる
item_text = "、".join(items)
# 文章に組み込む
message = f"購入する商品は、{item_text}です。"
print(message)実行結果は次のようになります。
購入する商品は、りんご、牛乳、パンです。リストを表示する前に、「人が読みやすい形になっているか」を考えると、適切な区切り文字を選びやすくなります。
これは、単なる型変換ではなく「データを見せる形に整える処理」と考えることもできます。
空のリストを変換するとどうなるか
空のリストを「join()」で変換すると、空文字になります。
items = []
# 空のリストを結合する
text = ",".join(items)
print(text) # 何も表示されない
print(len(text)) # 0エラーにはなりませんが、画面には何も表示されません。
データがないことを利用者へ伝えたい場合は、先にリストの中身を確認します。
items = []
# リストに要素があるか確認する
if items:
text = "、".join(items)
print(text)
else:
print("データがありません")「変換できるか」だけでなく、「空だった場合に何を表示するか」まで考えると、実際のプログラムで扱いやすくなります。
文字列をリストに変換する場合
反対に、一つの文字列をリストへ分割したい場合は「split()」を使います。
text = "りんご,みかん,バナナ"
# カンマの位置で文字列を分割する
fruits = text.split(",")
print(fruits) # ['りんご', 'みかん', 'バナナ']「join()」と「split()」は反対の働きをします。
リスト → join() → 文字列
文字列 → split() → リストこの関係をセットで覚えると、データ形式を変換するときに迷いにくくなります。
まとめ
Pythonでリストを文字列に変換する方法は、目的によって使い分けます。
- 文字列の要素を一つにつなげる:「join()」
- 数値を文字列にしてからつなげる:「map()」と「join()」
- リストの見た目を残して変換する:「str()」
- 文字列をリストへ分割する:「split()」
文字列だけのリストなら、次のように書けます。
text = ",".join(items)数値を含むリストなら、各要素を文字列へ変換してから結合します。
text = ",".join(map(str, numbers))大切なのは、「文字列に変換したあと、どのような形で使いたいのか」を先に考えることです。
画面に読みやすく表示したいのか、ファイルへ保存したいのか、動作確認のためにリスト全体を見たいのかによって、適切な方法は変わります。目的から逆算して選ぶと、「join()」と「str()」の違いも自然に理解できるようになります。

