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ドキュメント