Pythonのset(集合型)は、重複する要素を持たないという特徴の他に、もう一つ非常に重要な利点があります。それは、特定の要素がその set の中に**「含まれているかどうか(存在するかどうか)」を非常に高速に判定できる**ことです。
リスト(list)でも同じことは可能ですが、リストの要素数が数百万と非常に大きくなると、set での存在確認の速度が圧倒的に有利になります。
この記事では、set の要素の存在を確認するための in 演算子の使い方を解説します。
目次
in 演算子 – 存在の確認
in 演算子を使用すると、指定した要素が set 内に存在するかどうかを True(存在する)または False(存在しない)のブール値で取得できます。
構文:
要素 in set変数
使用例: あるシステムへのアクセスが許可されているユーザーIDを set で管理しているとします。
# アクセス許可ユーザーのセット
authorized_users = {"u-tanaka", "u-sato", "u-admin", "u-suzuki"}
print(f"許可ユーザーセット: {authorized_users}")
# 1. 存在する要素 ("u-admin") を確認
check_admin = "u-admin" in authorized_users
print(f"「u-admin」は存在するか?: {check_admin}")
# 2. 存在しない要素 ("u-kato") を確認
check_kato = "u-kato" in authorized_users
print(f"「u-kato」は存在するか?: {check_kato}")
実行結果:
許可ユーザーセット: {'u-suzuki', 'u-admin', 'u-tanaka', 'u-sato'}
「u-admin」は存在するか?: True
「u-kato」は存在するか?: False
not in 演算子 – 不在の確認
逆に、要素が set 内に存在しないことを確認したい場合は、not in 演算子を使用します。
構文:
要素 not in set変数
使用例:
# "u-kato" は「許可ユーザーセット」に含まれていないか?
check_kato_not_in = "u-kato" not in authorized_users
print(f"「u-kato」は存在しないか?: {check_kato_not_in}")
実行結果:
「u-kato」は存在しないか?: True
if 文での活用
in 演算子は、if 文の条件式で使うのが最も一般的です。これにより、「もしユーザーが許可ユーザーセットに含まれていたら」といった処理を簡潔に記述できます。
def check_access(user_id):
"""
ユーザーIDが許可セットに含まれているか判定する
"""
if user_id in authorized_users:
print(f"ようこそ、{user_id}。アクセスを許可します。")
else:
print(f"エラー: {user_id} にアクセス権限がありません。")
# 実行
check_access("u-sato")
check_access("u-guest")
実行結果:
ようこそ、u-sato。アクセスを許可します。
エラー: u-guest にアクセス権限がありません。
まとめ
set内に要素が存在するかどうかを確認するにはin演算子を使います。要素 in setは、存在すればTrue、しなければFalseを返します。- 存在しないことを確認するには
not in演算子を使います。 setを使うと、リスト(list)に比べてこの存在確認を非常に高速に行うことができます。
