言語バージョン 3.9.0

公開日 December 30, 2020, GMT+9

コード例の出力としてprint関数を使用しています。

使用方法がわからない場合は以下のページを参照してからコード例を確認してください。

print関数の使用方法

join(str、文字列)

このページでは豊富な例を用いてPythonのstrクラス(文字列)のjoinメソッドの使い方を学ぶことができます。

joinメソッドはstrクラス(文字列)のメソッドの1つです。
引数として「要素がすべて文字列の反復可能オブジェクト(iterable)」を取り、 呼び出し元の文字列を各要素の間に挿入して連結(結合)させた文字列を戻り値として返します。

要素がすべて文字列ではない反復可能オブジェクトを引数として与えた場合、エラーが発生します。

TL;DR

基本

# 呼び出し元の文字列をリストの各要素の間に挿入した文字列を返す
separator1 = ','
list1 = ['Python', 'JavaScript', 'Golang']
joined_value1 = separator1.join(list1)
print(joined_value1)
==> Python,JavaScript,Golang
print(type(joined_value1))
==> <class 'str'>

# 呼び出し元と引数には副作用はありません
print(separator1)
==> ,
print(list1)
==> ['Python', 'JavaScript', 'Golang']




# 引数は反復可能オブジェクト(iterable)を取ることができる
tuple1 = ('A', 'B', 'C', 'D')
joined_value2 = '-'.join(tuple1)
print(joined_value2)
==> A-B-C-D




# 空文字の場合
separator2 = ''
joined_value3 = separator2.join(['1', '2', '3'])
print(joined_value3)
==> 123




split_value1 = 'parent child grandchild'.split()
print(split_value1)
==> ['parent', 'child', 'grandchild']
joined_value4 = '/'.join(split_value1)
print(joined_value4)
==> parent/child/grandchild



dict1 = {'id': 'XS01', 'name': 'product1', 'date': '2020-12-29'}
joined_value5 = '__'.join(dict1.values())
print(joined_value5)
==> XS01__product1__2020-12-29




# 反復可能オブジェクトの中に文字列ではない要素があるとエラー
list2 = ['0', '1', 2]
joined_value6 = ','.join(list2)
==> TypeError: sequence item 2: expected str instance, int found




# 例外処理をする
list2 = ['0', '1', 2]
try:
    ','.join(list2)
except TypeError:
    print('Some elements must be converted to str.')
==> Some elements must be converted to str.

関連情報:type(組み込み関数)の使用方法

関連情報:splitメソッド(strクラス、文字列)の使用方法

関連情報:例外処理(try,except,else,finally)の使用方法

文字列要素以外を含む反復可能オブジェクトが引数の場合

# 反復可能オブジェクトの中に文字列ではない要素があるとエラー
list1 = [1, 2, 3]
joined_value1 = ','.join(list1)
==> TypeError: sequence item 0: expected str instance, int found



# 1. map関数を使用する
list1 = [1, 2, 3]
map1 = map(str, list1)
joined_value2 = ','.join(map1)
print(joined_value2)
==> 1,2,3



# 2. ジェネレータ式を使用する
range1 = range(5)
generator1 = (str(e) for e in range1)
joined_value3 = '...'.join(generator1)
print(joined_value3)
==> 0...1...2...3...4



# 3. リスト内包表記を使用する
tuple1 = (True, True, False)
joined_value4 = '-'.join([str(e) for e in tuple1])
print(joined_value4)
==> True-True-False

関連情報:map(組み込み関数)の使用方法

関連情報:rangeの使用方法

解説

基本

joinメソッドは引数として「要素がすべて文字列である反復可能オブジェクト(iterable)」を取り、 呼び出し元の文字列を各要素間に挿入して連結(結合)させた文字列を戻り値として返します。

引数として与える反復可能オブジェクトの要素に1つでも文字列でないものが存在する場合、 joinメソッドはTypeErrorを発生させます。
処理を継続させたい場合は、要素を文字列に変換するか(次項で説明)、例外処理を実装して対処してください。

separator1 = '-'
list1 = ['A', 'B', 'C']
joined_value1 = separator1.join(list1)
print(joined_value1)
==> A-B-C
print(type(joined_value1))
==> <class 'str'>

# 呼び出し元と引数には副作用はありません
print(separator1)
==> -
print(list1)
==> ['A', 'B', 'C']




# 引数は反復可能オブジェクト(iterable)を取ることができる
str1 = 'ABCDE'
joined_value2 = ','.join(str1)
print(joined_value2)
==> A,B,C,D,E




# 反復可能オブジェクトの中に文字列ではない要素があるとエラー
tuple1 = (1, 2, 3, 4)
joined_value3 = '='.join(tuple1)
==> TypeError: sequence item 0: expected str instance, int found

関連情報:type(組み込み関数)の使用方法

文字列要素以外を含む反復可能オブジェクトが引数の場合

文字列の要素以外を含む反復可能オブジェクトを引数として渡す場合、そのまま処理をするとTypeErrorが発生してしまいます。
処理を継続させ、呼び出し元の文字列と連結(結合)させた文字列を得たい場合は、要素を文字列に変換する必要があります。

ここでは map関数、 ジェネレータ式、リスト内包表記を用いて文字列に変換する方法を例として紹介します。 各場面の用途に合わせ使用を検討してください。

# 反復可能オブジェクトの中に文字列ではない要素があるとエラー
list1 = [True, False]
joined_value1 = ','.join(list1)
==> TypeError: sequence item 0: expected str instance, bool found



# 1. map関数を使用する
list1 = [True, False]
map1 = map(str, list1)
joined_value2 = ' / '.join(map1)
print(joined_value2)
==> True / False



# 2. ジェネレータ式を使用する
joined_value3 = ','.join(str(e) for e in range(3))
print(joined_value3)
==> 0,1,2



# 3. リスト内包表記を使用する
tuple1 = (100, 200, 300)
joined_value4 = '__'.join([str(e) for e in tuple1])
print(joined_value4)
==> 100__200__300

関連情報:rangeの使用方法

1次情報

joinメソッド - テキストシーケンス型 - Pythonドキュメント

strクラス(文字列) - テキストシーケンス型 - Pythonドキュメント

ジェネレータ式とリスト内包表記 - Pythonドキュメント