Python のinおよびnot in演算子は、特定の要素がシーケンス(リスト、タプル、文字列など)やコレクション(セット、辞書など)に含まれているかどうかを確認するために使用されます。本記事では、それぞれの演算子の使い方や注意点を説明します。
in演算子
構文
in演算子は、指定した「要素」が「オブジェクト」の中に存在するかどうかを調べ、存在すれば True、存在しなければ False を返します。
リストや文字列の他にも、タプル、セット、辞書などで使用可能です。
要素 in オブジェクト
例
# リスト内の要素をチェック
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # True
print(6 in numbers) # False
# 文字列の部分文字列をチェック
text = "Hello, world!"
print("Hello" in text) # True
print("Python" in text) # False
not in演算子
構文
not in演算子は、指定した「要素」が「オブジェクト」の中に含まれていないかどうかを調べます。
要素が存在しなければ True、存在する場合は False を返す、inの逆の動きをする演算子です。
要素 not in オブジェクト
例
numbers = [1, 2, 3, 4, 5]
print(10 not in numbers) # True
print(3 not in numbers) # False
text = "Python is fun"
print("Java" not in text) # True
print("Python" not in text) # False
in / not in演算子の適用範囲
Python で扱う代表的なデータ型(リスト、タプル、セット、文字列、辞書)に対して、in / not in を適用する場合の例を示します。
リスト(list)
リストでは各要素を順番に探索して、要素が含まれているかをチェックします。
fruits = ["apple", "banana", "cherry"]
print("banana" in fruits) # True
print("pineapple" not in fruits) # True
タプル(tuple)
タプルもリストと同様に要素を探索します。
numbers = (1, 2, 3)
print(2 in numbers) # True
print(10 not in numbers) # True
セット(set)
セットはハッシュを用いて要素を管理しているため、リストやタプルより検索が高速です。
items = {"apple", "banana", "cherry"}
print("banana" in items) # True
print("pineapple" in items) # False
文字列(str)
文字列に対してinを使うと、部分文字列として含まれているかをチェックします。
text = "Hello, Python!"
print("Hello" in text) # True
print("Python" not in text) # False
辞書(dict)
辞書では キーのみ を対象に検索します。値に対しては一致しないので注意が必要です。
data = {"name": "Alice", "age": 25}
print("name" in data) # True
print("Alice" in data) # False
実用例
条件分岐での使用
fruits = ["apple", "banana", "cherry"]
if "banana" in fruits:
print("バナナが含まれています。")
else:
print("バナナは含まれていません。")
辞書のキー検索
user_data = {"name": "Bob", "age": 30}
if "age" in user_data:
print("年齢情報が存在します。")
else:
print("年齢情報がありません。")
セットを使った高速検索
リストは要素を順番に探索する(線形探索)ため、データ量が増えると検索に時間がかかります(O(N))。一方、セットはハッシュテーブルを利用しているため、検索がほぼ一定時間(O(1))で高速に行えます。そのため、大量のデータから特定の要素を検索する場合は、セットを使うと処理が大幅に効率化されます。
items_list = ["apple", "banana", "cherry", "banana", "cherry"] * 100000
items_set = set(items_list)
target = "banana"
# リストで検索
print(target in items_list) # 大量の場合、時間がかかる
# セットで検索
print(target in items_set) # リストより高速
注意点
空文字列の扱い
空文字列「””」は、他の任意の文字列の部分文字列とみなされます。したがって、以下のように “abc” の中に空文字列が含まれていると判定されるため“” in “abc”はTrueを返します。
print("" in "abc") # True
辞書ではキーのみが検索対象
辞書(dict)に対してinを用いる場合、値ではなくキーが検索対象になります。
data = {"name": "Alice", "age": 25}
print("Alice" in data) # False (キーに"Alice"は無い)
まとめ
- in は要素がコレクションやシーケンスに含まれているかをチェックし、含まれていれば True、含まれていなければ False。
- not in は in の逆で、要素が含まれていなければ True、含まれていれば False を返す。
- リスト、タプル、セット、文字列、辞書など、Python が扱う多くのデータ型で使用できる。
これらの演算子は、条件分岐やデータチェックを行う際に非常に便利です。しっかり理解して活用していきましょう。