現在のパソコンやスマートフォンには、便利なアプリがたくさんそろっていますよね。SNSやゲームはもちろん、仕事や勉強、趣味、健康管理など、多種多様なアプリを目的に合わせて使えます。
また、インターネット環境とパソコンなどのデジタル機器が普及している現代では、欲しいアプリを自分でプログラミングをして作ることも可能です。そのため、今プログラミングを始める人が増えています。
そして、多くのプログラミング初心者が最初に選んで学習するプログラミング言語がPythonです。その大きな理由は、覚えやすさと、アプリだけでなくAI(人工知能)・Webサイト・ゲーム・データ分析など、いろいろなプログラム開発ができるからです。そんなPythonでプログラミングをするためには、さまざまな基本のプログラム処理を習得しなければなりません。
そして、その中の「文字列の比較」も覚えなければならない必須のスキル。Pythonの文字列の比較はそんなに難しい処理ではありません。しかし、注意事項を知らないと、思うようにプログラムが動作しなかったり、エラーが発生したりすることがあるので、初心者は文字列の比較についてしっかりと学習しましょう。
そこで今回は、Pythonプログラミングの文字列の比較について、その基本とエラーを発生させないための注意事項をお伝えします。
文字列を比較するとは?
Pythonの文字列の比較とは、対象の文字列の存在を確かめる処理になります。例えば、「これはリンゴです。」を英文に翻訳する作業をしたとしましょう。この日本語の英訳は「This is an apple.」。
簡単な英語ですが、「This is an applu.」や「That is an apple.」のように間違ったスペルや意味の違う単語を使って訳すことも考えられますよね。そのため辞書などを使い、「This is an apple.」や「This is an applu.」「That is an apple.」が英文として正しい(存在するのか)のかを確かめる作業が必要です。
これと同じようにPythonの文字列の比較は、対象の文字列がデータに存在しているのか、を確かめる処理になります。では、どのようなときにPythonの文字列の比較が使用されているのかを紹介します。
文字列の比較はどんな時に使うのか
Pythonで文字列の比較を使う主なケースは、次の3つです。
- データの照合:イメージは、Webサイトのログイン時にアカウント名・メールアドレス・パスワードを入力して行う認証。すでに格納してあるデータの確認に用いる
- データ加工:プログラミングでデータに含まれる文字列の加工の際に、特定の文字列の検出で使う
- 条件分岐:「AとBが一致したらCの処理を実行、一致しなければDの処理を行う」プログラムに使われている
③の条件分岐は、ログイン時に要求する「アカウント名・パスワードが一致したらログインを許可、一致しなければもう一度入力を要求する」のようなイメージです。そして、Pythonで文字列を比較する基本の方法が、次の4種類です。
- 完全一致
- 部分一致
- 前方一致
- 後方一致
では、それぞれの方法を紹介しましょう。
Pythonで文字列を比較する:完全一致
Pythonの文字列の完全一致(等価)とは、2つの文字列が全部合っているのか、そうではないのかを判定する処理です。その完全一致には、次の2つの比較演算子を使います。
!= ← 等しくない
実際に変数a、b、cに文字列を代入し、作成した完全一致のプログラムが次です。
a = “りんご”
b = “りんご”
c = “apple”
print(a == b) # print関数で結果を出力
print(a == c) # print関数で結果を出力実行結果 → True ← 真値(完全一致)
False ← 偽値(不一致)
a = “りんご”
b = “りんご”
c = “apple”
print(a != c)
print(a != b)実行結果 → False
True
上記のプログラムのように、結果が完全一致であれば真偽値のTrue、一致しなければFalseで返します。
しかし、初心者がこのプログラムを見ても、どんな時に使用するのかわかりにくいですよね。これはWebサイトのログイン時のパスワード認証のようなイメージになります。では次に、2つ目のPythonで文字列を比較する方法の部分一致について紹介します。
Pythonで文字列を比較する:部分一致
Pythonの文字列の部分一致とは、ある文字列の中に特定の文字列が含まれているかどうかの判定処理です。部分一致では、含まれているのかを調べるときは「in」、含まれない場合を調べるときは「not in」を使います。
text = “Amazonは家庭用ロボット「Astro」を発売すると発表しました。”
print(“Astro” in text)
print(“アストロ” in text)実行結果 → True
False
text = “Amazonは家庭用ロボット「Astro」を発売すると発表しました。”
print(“Astro” not in text)
print(“アストロ” not in text)実行結果 → False
True
これがPythonで文字列の比較に使用する部分一致です。例えば、検索エンジンで特定のキーワードを入力し、それが含まれるWebサイト記事を検索するようなイメージです。次は前方一致・後方一致を紹介しましょう。
Pythonで文字列を比較する:前方一致・後方一致
では、Pythonで文字列の比較に用いる前方一致・後方一致とは、次のような方法です。
前方一致
前方一致とは、対象の文字列の文頭が、特定の文字列であるかどうかの判定処理です。前方一致には、文字列だけで使用できる関数(メソッド)のstartswith()を使ってプログラムを作成します。
print(a.startswith(“Amazon”))
print(a.startswith(“アマゾン”))実行結果 → True
False
後方一致
後方一致とは、ある文字列の末尾が特定の文字列になっているのかを判定する処理です。後方一致には、文字列の関数(メソッド)のendswith()を使って、次のようなプログラムを作成します。
print(a. endswith (“伊藤直樹です。”))
print(a. endswith (“伊藤直紀です。”))実行結果 → True
False
今回紹介した4種類が、Pythonの文字列の比較の基本的な方法です。基本なのでそんなに難しくはありませんが、注意事項があります。次はそれについて紹介しましょう。
Pythonで文字列を比較する場合の注意事項
Pythonで文字列を比較する場合の注意事項が3つあります。
完全一致で「is」は使わない
最初の注意事項は、完全一致で「==」の代わりに「is」を使わないことです。完全一致のところで、使用する比較演算子は「==(完全一致)」「!=(不一致)」と紹介しました。
そして、これらの比較演算子と似たような機能をする「is(完全一致)」「is not(不一致)」を混同して使われることがあります。しかし、Pythonの文字列の比較で「is」を使うと、文字列自体が完全一致してもFalseと返されることがあります。
これは、「==」が文字列自体を比較するもの、「is」はオブジェクト(操作対象のデータ)の比較に使うという違いのためです。そのためオブジェクトの一つになる、複数のデータをまとめて保存できるリストに文字列を格納して比較すると、次のような結果になります。
print(c is d) → False
「c == d」はそれぞれの変数に格納されているデータを比較するのでTrue。「c is d」では、2つのリストは別々に作られた異なるものとして捉えるので、cとdは違うものと判断されFalseになります。isを使うと、このようなことが起きるので、Pythonで文字列の比較には「==」を使うようにしましょう。
正規表現を使った文字列の比較
正規表現とは、特定の文字列をパターンで認識して扱う機能です。Pythonにはさまざまな機能をする関数をまとめているモジュールがあります。その中で正規表現ができるreモジュールの関数を使うと、文字列の比較ができます。
re.match()・・・前方一致
re.search()・・・部分一致、前方一致、後方一致
例えば、正規表現を使った完全一致は次のようなプログラムになります。
import re ← reモジュールの呼び出し
a = “りんご”
b = “apple”
print(re.fullmatch(“りんご”, a)
print(re.fullmatch(“りんご”, b)
実行結果 → ← 完全一致
None ← 不一致
Pythonでは正規表現をつかって文字列を比較することもできますが、中級者レベルのスキルなので、まず初心者は今回紹介した基本を習得しましょう。
Python2とPython3の違い
Pythonには現在のバージョンであるPython3と、旧バージョンのPython2があります。Python2で扱う文字列のタイプには、str型とunicode型があり、この異なる2つを比較するとエラーになります
Python2のstr型とは、‘ ’シングルクォーテーションや“ ”ダブルクォーテーションで囲む通常の文字列です。そしてunicode型は、文字コードの世界標準の一つUnicodeのルールに沿って表示する文字列です。Pythonで文字列をunicode型として扱う場合は、文字列の先頭に「u」を付けます。
つまり、str型とunicode型は文字列を表示する仕組みが違うので、同じものとして比較するとエラーが発生します。しかし、現在のPython3では、str型自体がUnicode を採用しているので、このようなエラーが起きることはありません。
すでにPython2はサポートも終了しているので、初心者が扱うことはないかもしれませんが、もしかしたら、Python2で文字列の比較をする機会があるかもしれないので覚えておきましょう。
さて今回は、Pythonで文字列を比較するさまざまな方法について、お伝えしました。Pythonの文字列の比較とは、コンピュータ内に対象の文字列が存在しているのか、を確かめる処理です。そして、Pythonで文字列の比較を使う主なケースは、次の3つです。
- データの照合・・・コンピュータ内のデータの確認
- データ加工・・・文字列データの加工のときに、特定の文字列の検出に使用
- 条件分岐・・・「AとBが一致したらCの処理を実行、一致しなければDの処理を行う」プログラムに使用
そして、Pythonで文字列を比較する基本の方法が、次の4種類です。
- 完全一致(等価):2つの文字列が全部一致しているのかの判定処理、使用する比較演算子は完全一致が「==」、不一致が「!=」
- 部分一致:対象の文字列に特定の文字列が含まれているのかの判定処理、含まれている場合は「in」、含まれない場合は「not in」を使用
- 前方一致:対象の文字列の文頭が、特定の文字列であるかどうかの判定処理、startswith()メソッドを使用する
- 後方一致:対象の文字列の末尾が特定の文字列になっているのかの判定処理、endswith()メソッドを使う
この4種類がPythonの文字列の比較で行う基本的な方法で、使用する際には3つの注意事項があります。
- 完全一致では「is」を使うとエラーが発生することがあるので、「is」は使わない
- 正規表現を使った文字列の比較は中級者レベルなので、まず初心者は基本を習得する
- Python2では文字列にstr型とunicode型があり、2つを比較するとエラーになる
以上の3つに注意してPythonで文字列の比較をしましょう。
プログラミングは初級から中級、中級から上級へレベルアップしていくと、プログラムが複雑になっていきます。そのため途中で挫折しないように初心者の段階で、基本をしっかりと学習する必要があります。そして、今回紹介した文字列の比較もPythonで重要な基本のスキルなので、正しい使い方を習得しましょう。
【お知らせ】
当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。
御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。