Pythonでのin / not in演算子の使い方を解説

Python

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 inin の逆で、要素が含まれていなければ True、含まれていれば False を返す。
  • リスト、タプル、セット、文字列、辞書など、Python が扱う多くのデータ型で使用できる。

これらの演算子は、条件分岐やデータチェックを行う際に非常に便利です。しっかり理解して活用していきましょう。

タイトルとURLをコピーしました