Python 文字列 比較 大小関係や完全、部分一致などを解説!

Python 文字列 比較 大小関係や完全、部分一致などを解説

今回は、Pythonで文字列同士を比較して判定させる方法について解説します。

目次

文字列の比較ルール

ライティングボード

文字列の比較ルール

文字列も、数値と同じように比較演算子を使って比較することができます。
数値の比較では、どちらが大きいかということは、明確に分かりやすいのですが、文字列の場合の比較は分かりにくいところがありますので、
文字列の比較ルールを覚えておくようにするとよいでしょう。

文字列の比較ルール

  • 文字列の数字は、0が最小で、9が最大になります。(0 < 5 < 9)
  • アルファベットでは、a が最小で、z が最大になります。 (a < b < m < z)
  • アルファベット大文字は小文字より小さくなります。 (A < a)
  • 数字は、アルファベットよりも小さくなります。 (0 < 5 < A)
  • ひらがなは、カタカナよりもコードポイントが小さくなります。(あ < ア)

などのルールがあります。

文字列の大小関係(比較)

ライティングボード

文字列の大小関係(比較)

文字列も数値と同じように「<」、「>」、「<=」、「>=」演算子を使って大小比較をすることができます。
1文字目が同じなら2文字目、3文字目というように順に比較されます。

(例1)

print('a' < 'd')
# 実行結果:True

print('aa' < 'ac')
# 実行結果:True

print('abc' < 'abcd')
# 実行結果:True

完全一致(等価)

ライティングボード

完全一致(等価)

数値と同じように、2つの文字列が完全一致(等価)かどうかを判定させることができます。
「==」、 「!=」演算子を使います。

  • 「==」演算子では等価のとき「True」を、等価でないと「False」を返します。
  • 「!=」演算子では等価のとき「False」を、等価でないと「True」を返します。


(例2)

print('abc' == 'abc')
# 実行結果:True

print('abcd' == 'efg'))
# 実行結果:False

print('abc' == 'ABC')
# 実行結果:False

print('abcd' != 'efg')
# 実行結果:True

print('abc' != 'abc')
# 実行結果:False

部分一致

ライティングボード

部分一致

部分一致とは、文字列の中にもう一方の文字列が含まれているかどうかを判定することができます。

「in」、「not in」演算子を使います。

  • 「in」演算子では文字列の中にもう一方の文字列の文字が含まれているときに「True」を、含まれていないときに「False」を返します。
  • 「not in」演算子では文字列の中にもう一方の文字列の文字が含まれているときに「False」を、含まれていないときに「True」を返します。

(例3)

print('b' in 'a-b-c')
# 実行結果:True

print('z' in 'a-b-c')
# 実行結果:False

print('abc' in 'aaa-bbb-ccc')
# 実行結果:False

print('z' not in 'a-b-c')
# 実行結果:True

print('bbb' not in 'aaa-bbb-ccc')
# 実行結果:False

前方一致と後方一致

ライティングボード

前方一致と後方一致

前方一致

前方一致は、文字列の先頭が指定した文字列から始まっているかを判定します。
startswith()メソッドを使います。

(例4)

s = 'a-b-c'

print(s.startswith('a'))
# 実行結果:True

print(s.startswith('b'))
# 実行結果:False

引数には文字列のタプルを指定することもできます。

  • 先頭がタプルの要素の文字列に一致するとTrueを返します。
  • 先頭がタプルの要素の文字列に一致しないとFalseを返します。

(リストではエラーになるので注意してください。)

(例5)

s = 'aa-bb-cc'

print(s.startswith(('aa', 'bb', 'cc')))
# 実行結果:True

print(s.startswith(('dd', 'ee', 'ff')))
# 実行結果:False

後方一致

後方一致は、文字列の末尾が指定した文字列で終わっているかを判定します。
endswith()メソッドを使います。

(例6)

s = 'aaa-bbb-ccc'

print(s.endswith('ccc'))
# 実行結果:True

print(s.endswith('bbb'))
# 実行結果:False

print(s.endswith(('aaa', 'bbb', 'ccc')))
# 実行結果:True

任意の文字列の位置を取得する

ライティングボード

任意の文字列の位置を取得する

find()

find()は、文字列のメソッドで文字列中の任意の文字列の位置を取得することができます。

第一引数に指定した文字列が、呼び出し元の文字列にある場合は、その最初の文字の位置を返します。
該当する文字列が複数存在していても、最初の文字の位置のみが返されます。

また、位置は0から始まり、もし、含まれていない場合は、-1を返します。

(例)

x = 'abcdefg'
print(x.find('c'))
# 実行結果:3

print(x.find('z'))
# 実行結果:-1

rfind()

rfind()は、右側の後ろから検索し、その位置を返すことができるメソッドです。
該当する文字列が複数存在する場合は、一番右側の部分文字列の位置が返されます。

(例)

x = 'abcdefg'
print(x.rfind('f'))
# 実行結果: 2

print(x.rfind('z'))
# 実行結果: -1

count()

count()メソッドは、任意の文字列が何個含まれているか、カウントすることができます。

また、該当する文字列がない場合は、0が返されます。

(例)

x = 'abbcccddddeeeeefg'
print(x.count('c'))
# 実行結果: 3

print(x.count('dd'))
# 実行結果: 2

print(x.count('z'))
# 実行結果: 0

(同じ文字が重複してカウントされることはありません。)

split()

split()メソッドは、単語として検索し、値が完全に一致した要素のみがカウントされます。

(例)

n = 'I am Tom'
a = n.split()

print(a)
# 実行結果: ['I', 'am', 'Tom']

print(l.count('Tom'))
# 実行結果: 1

大文字小文字を区別せずに検索する

大文字と小文字を区別せずに検索する場合は、元の文字列と検索する文字列をどちらも大文字または小文字に一旦、変換して統一するようにします。

文字列を大文字に変換するには、upper()を使い、小文字に変換するには、lower()を使います。

(例)

x = 'aBcDeFg'

print(x.upper())
# 実行結果: ABCDEFG

print(x.lower())
# 実行結果: abcdefg

print(x.lower().find('a'))
# 実行結果: 1

print(x.upper().find('a'))
# 実行結果: -1

Unicodeコードポイントの取得

ライティングボード

Unicodeコードポイントの取得

Python3では、文字列はUnicodeで、文字列の大小関係や順番は、Unicodeコードポイントで判定されます。

Unicodeコードポイントは、組み込み関数の、ord()関数で取得できます。

(例7)

print(ord('a'))
# 実行結果:97

「a」は、97となります。
(参考までに「b」は、98になります。)

学習とキャリアの面でサポートし現役Webエンジニアの講師から
現場で必要なスキルが学べるプログラミングスクール!

TECH.I.S(テックアイエス)

教育訓練給付金制度の利用で受講料の最大70%が給付されます
社会人のキャリアアップとしても利用できるプログラミングスクール!

↓↓詳細をご覧になるには画像をクリックしてください↓↓

よかったらシェアしてください!
目次