note.nkmk.me

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

Date: 2018-02-09 / tags: Python, 文字列操作
このエントリーをはてなブックマークに追加

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

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

s = 'aaa'

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

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

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

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

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

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

リスト内包表記については以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事