Pythonで文字列を連結・結合(+演算子、joinなど)

Pythonでの文字列操作において、文字列を連結・結合する方法として、

複数の文字列を連結・結合: +演算子, +=演算子 数値と文字列を連結・結合: +演算子, +=演算子, str(), format() 文字列のリスト(配列)を一つの文字列に連結・結合: join() 数値のリスト(配列)を一つの文字列に連結・結合: join(), str()

を説明します。

複数の文字列を連結・結合: +演算子, +=演算子

+演算子で連結 +演算子を使って、文字列リテラル('...' or "...")および文字列の変数を連結できます。

s = 'aaa' + 'bbb' + 'ccc'
print(s)
# aaabbbccc

s1 = 'aaa'
s2 = 'bbb'
s3 = 'ccc'

s = s1 + s2 + s3
print(s)
# aaabbbccc

s = s1 + s2 + s3 + 'ddd'
print(s)
# aaabbbcccddd

+=演算子で連結 代入演算子である+=演算子も使えます。 左辺の文字列変数に右辺の文字列が連結され、代入・更新されます。

s1 += s2
print(s1)
# aaabbb

文字列変数の末尾に文字列を追加したい場合は、文字列変数と任意の文字列リテラル(または別の文字列変数)を+=演算子で処理すればOKです。

s = 'aaa'

s += 'xxx'
print(s)
# aaaxxx

文字列リテラルを連続して連結

単純に文字列リテラルを並べて書いてもその文字列リテラルが連結されます。

s = 'aaa''bbb''ccc'
print(s)
# aaabbbccc

間にスペースがあってもバックスラッシュ\による改行(継続行と見なされる)があっても問題ありません。

s = 'aaa'  'bbb'    'ccc'
print(s)
# aaabbbccc

s = 'aaa'\
    'bbb'\
    'ccc'
print(s)
# aaabbbccc

これを利用して長い文字列をコード中で複数行に改行して書くテクニックがあります。

文字列の変数に対してはこの書き方はできません。

# s = s1 s2 s3
# SyntaxError: invalid syntax

数値と文字列の連結・結合: +演算子, +=演算子, str(), format()

異なる型の+演算はエラーとなります。

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

# s = s1 + i
# TypeError: must be str, not int

数値(整数型intや浮動小数点型floatなど)と文字列を連結したい場合は、数値をstr()で文字列型に変換してから+演算子(または+=演算子)で連結します。

s = s1 + '_' + str(i) + '_' + s2 + '_' + str(f)
print(s)
# aaa_100_bbb_0.25

ゼロ埋めや小数点以下の桁数など、数値の書式を変換したい場合は、format()関数か文字列メソッドformat()を使います。

s = s1 + '_' + format(i, '05') + '_' + s2 + '_' + format(f, '.5f')
print(s)
# aaa_00100_bbb_0.25000

s = '{}_{:05}_{}_{:.5f}'.format(s1, i, s2, f)
print(s)
# aaa_00100_bbb_0.25000

書式の指定方法などの詳細は

文字列のリスト(配列)を連結・結合: join()

文字列メソッドjoin()を使うと、文字列のリストを一つの文字列に連結することができます。 書き方は以下の通り。 '間に挿入する文字列'.join([連結したい文字列のリスト])

'間に挿入する文字列'でjoin()メソッドを呼び出し、引数として[連結したい文字列のリスト]を渡します。 空文字列を使えば[連結したい文字列のリスト]が単純連結されるし、カンマ,を使えばカンマ区切りの文字列となり、改行文字\nを使えば文字列要素ごとに改行されます。

l = ['aaa', 'bbb', 'ccc']

s = ''.join(l)
print(s)
# aaabbbccc

s = ','.join(l)
print(s)
# aaa,bbb,ccc

s = '-'.join(l)
print(s)
# aaa-bbb-ccc

s = '\n'.join(l)
print(s)
# aaa
# bbb
# ccc

join()とは反対に、特定の区切り文字で区切られた文字列を分割してリストとして取得するにはsplit()を使います。詳細は

数値のリスト(配列)を文字列として連結・結合: join(), str()

数値のリストを文字列に連結したい場合は、リスト内包表記で各要素にstr()関数を適用して数値を文字列に変換してからjoin()で連結します。

l = [2017, 12, 31]

s = '-'.join([str(n) for n in l])
print(s)
# 2017-12-31
Last Updated: 6/26/2019, 10:34:03 PM