HOWTO · Python

Pythonで文字列を使った if 文を書く方法

Python の if 文で文字列の内容を比較する方法を解説します。== による等価比較、in による部分文字列や候補値の確認、大文字小文字を区別しない比較を例とともに紹介します。

このページの内容

文字列の内容を比べるには ==、文字列内の部分文字列や許可された応答を調べるには in を使います。大文字小文字を無視して比較したい場合は、lower() などで文字列をそろえます。目的に合った条件を選びましょう。文字列の比較は既定で大文字小文字を区別し、is は文字列の等価性ではなくオブジェクトの同一性を調べます。

基本的な文字列比較

2つの文字列に同じ内容が入っているか調べるときは ==、異なることを調べるときは != を使います。条件を実行する前に、比較する名前を両方とも定義しておく必要があります。詳しくはPython での文字列比較を参照してください。

名前が一致するかを調べる簡単な例です。

name = "Alice"
if name == "Alice":
    print("Hello, Alice!")
else:
    print("You're not Alice.")

Python は大文字小文字を区別して文字列を比較するため、"Alice" == "alice" は False になります。内容ではなく長さを比べたい場合は、len() を使えます。

word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
    print(f"{word1} is shorter than {word2}")
else:
    print(f"{word1} is not shorter than {word2}")

<、>、<=、>= は Unicode コードポイントに基づく辞書順で文字列を比較します。単語の意味を比べる演算子ではなく、すべての言語でアルファベット順になるわけでもありません。利用者向けの並べ替えには、ロケールに対応した方法を使ってください。

文字列で in キーワードを使う

文字列に対して in を使うと、左側の文字列が部分文字列として含まれているかを調べられます。この比較は大文字小文字を区別し、単語単位の一致を要求しません。

sentence = "Python is awesome"
if "awesome" in sentence:
    print("The sentence contains 'awesome'")

入力が許可された複数の文字列のどれかと完全に一致するかを調べるには、コレクションを使います。次の例では、ユーザーの応答を小文字にしてから候補と照合しています。

user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
    print("User agreed")
else:
    print("User did not agree")

部分文字列の確認方法や関連する例は、Python で文字列に別の文字列が含まれるか確認する方法を参照してください。繰り返し現れる一致箇所を探す方法は、文字列内の出現箇所をすべて見つける方法で説明しています。

大文字小文字を区別しない文字列比較

大文字小文字を無視したい場合は、比較する両方の値を正規化します。単純な照合には lower() がよく使われます。casefold() は Unicode テキストをより広く大小文字の違いを無視して照合するためのメソッドです。正規化すると比較方法が変わるため、大小文字を区別しない比較が必要な場合にだけ使ってください。

user_input = "YES"
if user_input.lower() == "yes":
    print("Affirmative response received")

同じ方法で、候補リストに対する所属確認もできます。

color = "RED"
if color.lower() in ["red", "blue", "green"]:
    print("Color accepted")
else:
    print("Color not accepted")

簡単な大小文字の変換には lower() または upper() を使います。例についてはPython で文字列を小文字または大文字に変換する方法を参照してください。

発展的な文字列比較

アナグラムの判定

文字を並べ替えると、2つの文字列に同じ文字が同じ個数だけ含まれているかを簡単に調べられます。

word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
    print("The words are anagrams")

この方法では、大文字と小文字は別の文字として扱われ、空白や句読点も比較対象に含まれます。それらを無視したい場合は、先に文字列を正規化するか、不要な文字を取り除いてください。

文字列メソッドを使う

startswith() と endswith() を使うと、文字列の先頭や末尾に特定の文字列があるかを直接確認できます。

filename = "document.txt"
if filename.endswith(".txt"):
    print("Text file detected")

複数の条件

and、or、not を使って条件を組み合わせられます。and でつないだ条件全体が真になるには、左右の条件がどちらも真である必要があります。

name = "John Doe"
if name.startswith("John") and " " in name:
    print("Name matches the expected format")

これは簡単な文字列チェックにすぎず、あらゆる名前の形式を検証するものではありません。

同一性の比較

is は、2つの名前が同じオブジェクトを参照しているかを調べます。文字列の内容を比較するには == を使ってください。オブジェクトの同一性は、テキストが等しいかどうかを調べる方法として信頼できません。

first = "Python"
second = "Python"
if first == second:
    print("The strings have equal contents")

まとめ

文字列の内容には == または !=、部分文字列やコレクション内の候補の確認には in を使います。大文字小文字を無視する必要がある場合は比較前に正規化し、先頭や末尾を調べるには文字列メソッドを選びます。文字列の内容の比較には == を使いましょう。is はオブジェクトの同一性について調べる演算子です。

よくある質問

Python の文字列比較は大文字小文字を区別しますか?
はい。既定では "Python" と "python" は異なる文字列です。区別しない場合は、比較する両方の値を正規化します。

if 文で複数の文字列条件を確認できますか?
できます。and または or で条件をつなぎます。意図するグループが明確になる場合は、かっこを使ってください。

== と is の違いは何ですか?
== は値を比較し、is は2つの参照が同じオブジェクトを指しているかを調べます。文字列の内容を比べるときは == を使います。

文字列が特定のテキストで始まるか、終わるかを調べるには?
startswith() または endswith() を呼び出します。たとえば、filename.endswith(".txt") と書けます。

if 条件で正規表現を使えますか?
使えます。パターンで照合する必要がある場合は、条件内で Python の re モジュールの re.search(pattern, text) などを呼び出します。単純な部分文字列の確認なら、通常は in のほうが直接的です。