文字列をつなぎ合わせる操作(結合)や、複数の文字列を一度に連結する方法についての解説しています。例えば、以下のような操作が含まれます。
- 文字列同士の結合
- 文字列の繰り返し
- 文字列と数値(int, floatなど)の結合
- 文字列の中に他の変数を展開
- 文字列のリストを連結
これらをPythonで実装する方法を、現役のエンジニアが解説しています。
なお、反対に文字列を分割してリストを作成する方法は以下のページでまとめています。
結論
文字列同士を結合(+
演算子)
s = 'foo' + 'bar'
print(s)
# foobar
文字列の単純な繰り返し(*
演算子)
s = 'hoge'
t = s * 3
print(t)
# hogehogehoge
文字列と他の型(int,float,..)を結合(str()
で型変換)
s = 'foo'
t = s + str(10)
print(t)
# foo10
文字列の中に他の変数を展開する (f-string)
val = 11.111
print(f"Price: {val}")
# Price: 11.111
文字列のリストを連結する (join()
)
l_str = ['foo', 'bar', 'buz']
print(','.join(l_str))
# foo,bar,buz
実行環境
Python 3.9.2
文字列同士を結合 +演算子
文字列リテラルを結合するには +
演算子を用います。
s = 'foo' + 'bar'
print(s)
# foobar
文字列 str
型の変数も +
で結合できます。
s1 = 'foo'
s2 = 'bar'
s3 = 'baz'
s = s1 + s2 + s3
print(s)
# foobarbaz
もちろん文字列変数と文字列リテラルでも結合可能です。
s = s1 + 'qux'
print(s)
# fooqux
ある文字列の末尾に、他の文字列を追加(結合)するだけなら、+=
演算子の方が短く書けます。
s = 'foo'
s += 'bar'
# s = s + 'bar' と同じ
print(s)
# foobar
文字列の単純な繰り返し *演算子
*
演算子は、算術演算子として使うなら乗算(かけ算)になりますが、文字列に対しては反復繰り返しを生成します。
[文字列] * [繰り返し回数]
の形で記述します。
s = 'hoge'
t = s * 3
print(t)
# hogehogehoge
乗算の演算子 s * n
は、文字列sをn回足す (+
) ことと同じことです。
文字列と他の型(int,float,..)を結合
文字列と、文字列str
以外の型(int, float,など)を+
などで結合しようとするとエラーとなります。
s = 'foo'
t = s + 10
# TypeError: can only concatenate str (not "int") to str
数値型を文字列と結合するには、一度文字列str
型に変換(キャスト)します。
変換にはstr()
を用います。
s = 'foo'
t = s + str(10)
print(t)
# foo10
t = s + str(1.23)
print(t)
# foo1.23
文字列の中に他の変数を展開する f-string
文字列と数値型の結合をさらに柔軟に行うには、文字列中に他の変数を展開するように考えるとよいでしょう。
文字列の中に数値型などの変数を展開するにはフォーマット済み文字列リテラル(f-string、f文字列と呼ばれます)を利用します。
f-stringにするには、文字列リテラルの ""
や ''
の直前にf
を追加するだけです。文字列の中で変数を展開する位置には {変数名}
のように書きます。
val = 11.111
print(f"Price: {val}")
# Price: 11.111
書式指定を書くことで、桁数やゼロ埋めの調整、符号の表示などが表現できます。
print(f"Price: {val:.1f}")
# Price: 11.1
詳しくはドキュメント参照。
書式指定ミニ言語仕様 — Python 3.9.4 ドキュメント
なお、f-stringはPython 3.6以降に実装された機能。3.5以前はformat()などで同様の表現が実現できます。
print("Price: {}".format(val))
# Price: 11.111
文字列のリストを連結する str.join()
文字列のリスト(list)は組み込み関数 str.join()
を使えばひとつの文字列に連結することができます。
連結した文字列 = sep.join(iter)
sep | 連結に用いる文字列(セパレーター) |
iter | リストなどのイテラブルなオブジェクト |
セパレーターとして,
を用いて文字列を連結するには次のようにします。
l_str = ['foo', 'bar', 'buz']
print(','.join(l_str))
# foo,bar,buz
セパレーターに ''
(空文字列)を使えば、要素同士を単に+
で連結するのと同じになります。
print(''.join(l_str))
# foobarbuz
セパレーターに改行文字を用いると各行に1要素ずつ配置できます。
print('\r\n'.join(l_str))
# foo
# bar
# buz
join()
に渡すオブジェクトはリスト以外でもイテラブルなら問題ありません。例えばタプルでもOKです。
l_str = ('foo', 'bar', 'buz')
print(','.join(l_str))
# foo,bar,buz
なお、文字列 str
型以外の値が含まれる場合は、エラーになります。
l = ['foo', 123, 'bar', 1.234]
','.join(l)
# TypeError: sequence item 1: expected str instance, int found
この場合は、各要素を文字列型に変換してからjoin()
します。リスト内包表記などを活用します。
l = [str(elem) for elem in l]
print(','.join(l))
# foo,123,bar,1.234
反対に、文字列を区切り文字(セパレータ)で分割しリストにする方法は以下のページで解説しています。
Pythonの学習法について
Python の勉強が辛くなっていませんか?
Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。
ゼロから独学で勉強するのは厳しい道のりです。
今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。
できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。
今回参考にしたページ・資料
str.join 組み込み型 — Python 3.9.4 ドキュメント
7.1.1. フォーマット済み文字列リテラル 7. 入力と出力 — Python 3.9.4 ドキュメント
str.format 組み込み型 — Python 3.9.4 ドキュメント