文字列の基礎知識 – Python3 入門 マニュアル

このページではPython3の文字列についての基礎知識から文字列の比較・結合・置換など実用的な使い方まで、Python3の文字列操作に必要な知識をまとめています。

文字列の基本

Python はシングルクォート、ダブルクォート、三重引用符(三重クォート)の3つの方法で文字列を生成します。

 

三重引用符は複数行にわたる文字列を扱うことができます。三重引用符は表示や変数セットだけでなく、ソースコードにコメント(コメントアウト)にもよく利用されます。

 

組み込み関数 type() の結果のように Python の文字列はオブジェクト( str オブジェクト)です。

 

文字列の比較(比較演算子)

演算子 記述例 説明
== a == b a が b に等しい場合に True
!= a != b a が b に等しくない場合に True

※ a > b や a >= b のような「不等号の演算子」は構文エラーにならず使用可能ですが、通常はこれらの演算子を文字列比較に使用しないため省略します。

文字列比較の注意事項

  • 大文字と小文字は区別される(’A’と’a’は等しくない)
  • 文字列と数値は区別される(’1’と1は等しくない)
  • PHP や JavaScript の === や !== 演算子はない(エラー)
 

文字列演算子

変数aと変数bを以下とします。
a = ‘Hello’
b = ‘Python3’

演算子 説明とサンプル
 + 文字列を結合(連結)します。

a + b は ‘HelloPython3’

 *  文字列を繰り返し(反復)します。

b * 3 は ‘Python3Python3Python3’

 []  インデックスを指定して文字を取り出します。文字列のスライス。

a[0] は H
a[1] は e
a[-1] は o
a[-4] は e

※マイナスを指定すると末尾を基準に抽出。

 [ : ]  開始位置と終了位置を指定して文字列を部分抽出します。範囲指定スライス。

a[0:3] は ‘Hel’
a[1:4] は ‘ell’

 [ : : ]  [ i : j : k ] の場合、開始位置 i から 終了位置 j までを k 毎に抽出を指定して文字列を部分抽出します。ステップ付き範囲指定スライス。

言葉ではわかりにくいため下のサンプルソースコードを参照ください。

 in 文字列の中に含むかを判定します。 含むなら True 、含まないなら False を返します。

‘H’ in a は True
‘h’ in a は False
‘g’ in a は False
‘lo’ in a は True
‘abc’ in a は False

 not in not in は in の逆、つまり文字列の中に含まないかを判定します。 含むなら False 、含まないなら True を返します。

‘H’ not in a は False
‘g’ in a は True

% 文字列書式化または補間演算子。詳細はフォーマットによる文字列操作で説明します。

 
補足:ステップ付き範囲指定スライスのサンプル

 

フォーマットによる文字列操作

Python には sprintf() 関数はありませんが、3つの方法でフォーマットによる文字列操作が可能です。

printf 形式の文字列書式化

Python では % 演算子 によりC / PHP / Ruby / Perl といったプログラミング言語の sprintf() に(およそ)相当する文字列操作を行うことができます。

フォーマットの詳細はPython3公式ドキュメント「printf 形式の文字列書式化」を参照ください。

ただし、現在はこの方法よりも次の str.format() が推奨されています。

ここで述べる書式化演算には様々な癖があり、よく間違いの元になっています (タプルや辞書を正しく表示できないなど)。新しい フォーマット文字列リテラル や str.format() インタフェースの方が間違いにくく、より強力で、柔軟で、さらに拡張可能です。

docs.python.jp より引用

str.format()

str.format() によりシンプルかつ柔軟に文字列の書式化操作ができます。

インデックスを省略することも可能です。

str.format() に関するフォーマットの詳細はPython3公式ドキュメント「書式指定文字列の文法」を参照ください

フォーマット済み文字列リテラル

2016年12月リリースの Python 3.6 で新たに「フォーマット済み文字列リテラル( formatted string literal )」という方法が追加されました。詳細はPython3公式ドキュメント「フォーマット済み文字列リテラル」を参照ください。

逆引き

文字列の長さを取得する

組み込み関数 len() により文字列長を取得できます。

 

文字列を結合する

+ 演算子により文字列を結合します。

 

区切り文字で文字列を結合する

特定の区切り文字を入れて結合するには str.join() メソッドを使います。

 

文字列と数値を結合する

+ 演算子で文字列と数値を結合するとTypeErrorが発生してしまうので、組み込み関数 str() により型変換してから結合します。

 

文字列を置換する

str.replace(old, new[, count]) により文字列を置換できます。オプション引数 count が与えられている場合、先頭から count 個の old だけを置換します。

 

文字列を含むかを判定する

in 演算子により文字列を含むかを判定できます。

なお、文字列を検索する str.find() メソッドもありますが、含むかを判定するだけの場合には in 演算子を使うことが推奨されています。

find() メソッドは、 sub の位置を知りたいときにのみ使うべきです。 sub が部分文字列であるかどうかのみを調べるには、 in演算子を使ってください
docs.python.jp より引用

 

文字列の一部を取得する(スライス・substring)

[ : ] 演算子により文字列の一部を取得できます。[開始位置:終了位置] 開始位置は 0 から始まることに、終了位置は指定した値から 1 引いた位置になることに注意が必要です。
 

文字列を分割する

str.split()メソッドにより文字列を分割できます。引数に区切り文字(デリミタ)を指定します。

 

大文字と小文字の変換

大文字に変換するには upper() メソッド、小文字に変換するには lower() メソッドを使用します。

 

最初の文字だけ大文字にする

str.capitalize() メソッドにより最初の文字だけを大文字にできます。

その他

この他にも Python の文字列(strオブジェクト)には便利なメソッドがたくさんあります。公式ドキュメント「文字列メソッド」をチェックしてましょう。