🐍 Python

in 演算子(部分文字列の判定)

ある文字列が別の文字列に含まれているかを調べるには、メソッドを呼ばずにin演算子を使うのが最もシンプルで読みやすい方法です。位置は分からず、真偽値(True/False)だけが欲しいときに使います。

構文: 部分文字列 in 文字列
戻り値: True または False

基本の使い方

s = "hello world"
print("world" in s)   # True
print("python" in s)  # False

not inで否定判定する

含まれていないことを調べたい場合はnot inを使います。not ("x" in s)と書くより自然に読めます。

print("xyz" not in s)  # True

実用例:許可された拡張子かを検証する

allowed_ext = [".jpg", ".png", ".gif"]
fname = "photo.png"
ext = fname[fname.rfind("."):]
print(ext in allowed_ext)  # True

大文字・小文字を区別する落とし穴

in演算子は完全一致で部分文字列を判定するため、大文字・小文字の違いも区別します。ユーザー入力を検証するコードでこの点を見落とすと、意図した文字列が含まれているのにFalseと判定されるバグになります。

s = "Hello World"
print("hello" in s)         # False(大文字小文字が違う)
print("hello" in s.lower()) # True(両辺を小文字にそろえてから比較)
in演算子が使える対象
文字列
部分文字列が含まれているかを判定
リスト・タプル
要素として存在するかを判定(3 in [1, 2, 3]はTrue)
辞書
キーとして存在するかを判定(値ではない点に注意)
💡 位置も知りたいならfind/indexを使う

in演算子は「含まれているか」の真偽値しか教えてくれません。「どこに含まれているか」という位置情報も必要な場合はfind / indexを使います。AIが生成したコードでif sub in s:のあとにs.find(sub)を呼んで位置を再計算している場合、二度手間になっていないか(最初からfindだけで済ませられないか)を確認する価値があります。

← Python str クイックリファレンス一覧へ戻る