Python転職初心者向けエンジニアリングブログ

Pythonに魅了されたあなたへ。エンジニアリングの扉を開く転職初心者向けのブログへようこそ。このブログでは、Pythonの奥深さに迫りながら、エンジニアリングへの転職に役立つ情報を提供しています。未経験者から始めるPythonエンジニアリングの世界への一歩を踏み出すためのガイダンス、ベストプラクティス、そして成功事例など、初心者の方でもわかりやすいコンテンツをお届けします。

Pythonで文字列を比較する方法(完全一致、部分一致、大小関係など)

LYPプレミアム会員 python

Pythonで文字列を比較する方法(完全一致、部分一致、大小関係など)

Pythonでは、文字列の比較を行うための様々な方法が提供されています。例えば、2つの文字列が全く同じかどうか(完全一致)、一部が一致しているか(部分一致)、あるいは辞書順での大小関係の比較など、文字列を扱う多くのシチュエーションに対応しています。

この記事では、Pythonでの文字列の比較方法について、具体的なサンプルコードを交えながら詳しく解説していきます。

1. 完全一致の比較

まず最も基本的な文字列比較の方法として、完全一致の比較があります。これは2つの文字列が全く同じであるかどうかを確認する方法です。

完全一致の比較方法

Pythonでは、比較演算子 == を使うことで、2つの文字列が完全に一致するかどうかを簡単に確認できます。

# 文字列の完全一致の比較
str1 = "apple"
str2 = "apple"
str3 = "Apple"

# 完全一致のチェック
print(str1 == str2)  # True
print(str1 == str3)  # False

実行結果

True
False

この例では、str1str2 は同じ文字列 "apple" なので True が返されますが、str3 は大文字の "Apple" であるため、str1 との比較では False が返されます。Pythonの文字列比較はデフォルトで大文字と小文字を区別します。

2. 部分一致の比較

次に、2つの文字列のうち、ある部分が一致しているかどうかを確認する部分一致の方法を紹介します。部分一致には様々な方法がありますが、最もシンプルなのは、Pythonのin演算子を使用する方法です。

部分一致の比較方法

in 演算子を使えば、ある文字列が別の文字列に含まれているかどうかを確認できます。

# 部分一致の比較
main_str = "Hello, world!"
sub_str1 = "world"
sub_str2 = "Python"

# 部分一致のチェック
print(sub_str1 in main_str)  # True
print(sub_str2 in main_str)  # False

実行結果

True
False

このコードでは、main_str という文字列に sub_str1 の "world" が含まれているため True が返され、sub_str2 の "Python" は含まれていないため False が返されます。このように、in演算子を使えば簡単に部分一致の確認が可能です。

3. 大小関係の比較

Pythonでは、文字列の大小関係を比較することもできます。文字列の比較は、基本的に文字コードの値(ASCIIやUnicodeなど)に基づいて行われます。これにより、文字列の辞書順やアルファベット順を確認することが可能です。

文字列の大小比較

比較演算子 <><=>= を使うことで、文字列の辞書順での大小関係を比較できます。

# 文字列の大小関係の比較
str1 = "apple"
str2 = "banana"
str3 = "apple"

# 比較
print(str1 < str2)  # True (apple comes before banana)
print(str1 > str2)  # False
print(str1 <= str3) # True

実行結果

True
False
True

このコードでは、文字列 "apple" は "banana" よりも辞書順で前に来るため、str1 < str2True になります。また、str1str3 は同じ文字列なので <= の比較も True を返します。

4. 大文字・小文字を無視した比較

先ほどの例では、Pythonはデフォルトで大文字と小文字を区別することを確認しました。しかし、大文字と小文字を区別せずに比較したい場合もあります。この場合、文字列を一旦小文字や大文字に変換してから比較することができます。

大文字・小文字を無視した比較方法

lower() メソッドや upper() メソッドを使って、文字列を一時的にすべて小文字または大文字に変換してから比較を行います。

# 大文字・小文字を無視した比較
str1 = "Apple"
str2 = "apple"

# 小文字に変換して比較
print(str1.lower() == str2.lower())  # True

実行結果

True

この例では、str1 は大文字の "Apple" ですが、両方の文字列を lower() メソッドで小文字に変換してから比較することで、大文字小文字を無視した比較を実現しています。

5. 文字列の先頭・末尾の一致を確認する

Pythonでは、文字列の先頭や末尾が特定の文字列で始まっているか、または終わっているかを簡単に確認する方法も提供されています。これには、startswith() および endswith() メソッドを使用します。

先頭の一致を確認する

# startswith()メソッドを使った先頭一致の確認
str1 = "hello world"
print(str1.startswith("hello"))  # True
print(str1.startswith("world"))  # False

実行結果

True
False

末尾の一致を確認する

# endswith()メソッドを使った末尾一致の確認
print(str1.endswith("world"))  # True
print(str1.endswith("hello"))  # False

実行結果

True
False

これらのメソッドを使うことで、特定のパターンが文字列のどの位置に現れるかを簡単に確認することができます。

6. 正規表現による部分一致の詳細な比較

in 演算子を使った部分一致の比較は便利ですが、もっと複雑な条件で文字列を部分一致させたい場合は、正規表現(regex)を使うと便利です。Pythonでは、標準ライブラリの re モジュールを使って正規表現を扱うことができます。

正規表現による部分一致の比較方法

次の例では、正規表現を使って、文字列に特定のパターンが含まれているかどうかを確認します。

import re

# 正規表現を使った部分一致の確認
str1 = "The quick brown fox jumps over the lazy dog"
pattern1 = r"quick.*fox"  # "quick" から "fox" までの文字列を探す
pattern2 = r"lazy cat"    # 存在しないパターン

# 正規表現の検索
print(re.search(pattern1, str1))  # マッチするパターンがあればMatchオブジェクトが返される
print(re.search(pattern2, str1))  # None

実行結果

<re.Match object; span=(4, 19), match='quick brown fox'>
None

この例では、pattern1 に基づいて "quick" から "fox" までの文字列を検索しています。このパターンに一致する部分が見つかった場合、Match オブジェクトが返されます。一方で、pattern2 は文字列内に存在しないため、None が返されます。

7. 文字列の類似度を比較する

時には、文字列が完全に一致していなくても、類似度を比較したい場合があります。例えば、ユーザー入力が多少誤っていても許容範囲内であるかどうかを確認したい場合などです。その際に使えるのが、レーベンシュタイン距離(Levenshtein distance)やdifflib モジュールです。

difflibモジュールを使った類似度比較

Pythonの difflib モジュールを使えば、2つの文字列がどれだけ似ているかを簡単に確認できます。

import difflib

# 類似度を計算する
str1 = "apple"
str2 = "appl

le"  # 1文字違い

# 類似度の計算
similarity = difflib.SequenceMatcher(None, str1, str2).ratio()
print(f"類似度: {similarity:.2f}")

実行結果

類似度: 0.91

このコードでは、str1str2 の類似度が計算され、約 91% の類似度があることが分かります。difflib を使えば、文字列の違いが小さい場合にも対応できます。

終わりに

Pythonでの文字列比較には、非常に多くの方法が用意されており、様々な状況に応じて使い分けることができます。完全一致、部分一致、大小比較、大文字・小文字を無視した比較、さらには正規表現や類似度の比較まで、柔軟に対応できるPythonの機能を活用して、より高度な文字列処理を実現しましょう。