要素を区切り文字で連結 (str.join) | Python-izm

要素を区切り文字で連結

Pythonではリストタプルなどの要素を、カンマやドットなどの区切り文字を付与して連結することが容易にできます。

str.join

たとえば次のような要素を持つリストがあり、それぞれの要素の間へ「 . 」を入れたいと思います。

# これを www.python-izm.com としたい
elem = ['www', 'python-izm', 'com']

この場合、ループ処理で各要素のあとへ単純に「 . 」を付与すると最後に余計な「 . 」が付いてしまいます。

elem = ['www', 'python-izm', 'com']

host_name = ''
for val in elem:
    host_name += val + '.'
print(host_name)

www.python-izm.comではなくwww.python.izm.com.となってしまう。

www.python-izm.com.

これを改善する場合、最後の要素のときだけ「 . 」を付与しない、というようなif文が必要です。

elem = ['www', 'python-izm', 'com']

host_name = ''
for val in elem:
    if val != 'com':
        host_name += val + '.'
    else:
        host_name += val
print(host_name)
www.python-izm.com

これはプログラミングを行う上でよくある処理です。ただし単純な処理を何度も書くのも面倒ですし、ソースコードが長くなってしまいがちです。こういったケースにおいて、Pythonではstr.joinを用いることで同様の処理を容易に行う事ができます。

elem = ['www', 'python-izm', 'com']

print('.'.join(elem))
www.python-izm.com

‘<区切り文字>’.join(<反復可能なオブジェクト>) というような記述で要素を連結することができます。引数は反復可能なオブジェクトであれば何でも構いません。改行コードやカンマでjoinを用いることで任意の区切り文字を入れることができます。

elem = ['www', 'python-izm', 'com']

print('\n'.join(elem))
print(','.join(elem))
print(' '.join('1234567890'))

print('+'.join(('1', '2', '3')))
# print('+'.join((1, 2, 3)))
www
python-izm
com
www,python-izm,com
1 2 3 4 5 6 7 8 9 0
1+2+3

主にリストやタプルに対して行うことが多いと思いますが、要素には文字列以外を含んではなりません。8行目のような連結はエラーとなります。連結した要素を元の状態へ戻す場合はstr.splitを使用すると良いでしょう。