Pythonでリストを文字列に変換する方法|join・map・strの違いを解説

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

このコードは、次の順番で処理されています。

  1. 「map(str, numbers)」で各数値を文字列に変換する
  2. 「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()」の違いも自然に理解できるようになります。

この記事が役に立ったらシェア
  • URLをコピーしました!
この記事の内容