🐍 Python
str.join(iterable)
リストなどの各要素を、指定した区切り文字でつないで1つの文字列にするメソッドです。呼び出す主体が「区切り文字の側」であることが直感に反しやすく、AIが生成したコードでもlist.join(sep)のように逆に書かれた誤りを見抜けると役立ちます。
構文: sep.join(iterable)
戻り値: iterableの各要素をsepでつないだ1つの文字列
基本の使い方
区切り文字の文字列に対して.join()を呼び、引数にリストを渡します。str.split()とちょうど逆の操作になります。
words = ["Docker", "Kubernetes", "Linux"]
print(", ".join(words)) # 'Docker, Kubernetes, Linux'
区切り文字を空文字列にすると単純結合になる
区切り文字に空文字列""を使うと、間に何も挟まずそのまま連結します。
print("".join(["A", "B", "C"])) # 'ABC'
数値のリストを渡すとTypeErrorになる
str.join()は要素がすべて文字列であることを前提にしています。数値のリストをそのまま渡すと、要素を暗黙に文字列変換してはくれずTypeErrorになります。AIが生成したコードで数値と文字列が混在するリストをjoinしている箇所は、実行前に疑ってよいポイントです。
try:
print(",".join([1, 2, 3]))
except TypeError as e:
print("TypeError:", e)
# TypeError: sequence item 0: expected str instance, int found
mapで文字列に変換してから渡す
数値のリストを結合したい場合は、先にmap(str, ...)で各要素を文字列に変換してからjoinに渡します。
nums = [1, 2, 3]
print(",".join(map(str, nums))) # '1,2,3'
パラメータ
- iterable
- 結合したい文字列のリスト・タプルなど。要素はすべて文字列である必要がある
💡 AIコードレビュー観点:呼び出し元が区切り文字であることを確認する
", ".join(words)のように、区切り文字の文字列が.join()を呼び出す主体になります。「リストを結合したい」という意図からwords.join(", ")のように逆に書いてしまうミスはAI生成コードでも起こり得るので、動かない場合はまず主語(どちらが呼び出し元か)を確認しましょう。
逆に文字列を分割する方法はstr.splitのページで解説しています。