Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Python辞典

  1. トップページ
  2. Python辞典
  3. セット.issubset() / セット.issuperset() / セット.isdisjoint()

セット.issubset() / セット.issuperset() / セット.isdisjoint()

セット同士の包含関係を確認するメソッドです。あるセットが別のセットの部分集合・上位集合かどうか、または共通要素がないかどうかを判定できます。

構文
# セットAがセットBの部分集合かどうか確認します。
セットA.issubset(セットB)
セットA <= セットB

# セットAがセットBの真部分集合かどうか確認します。
セットA < セットB

# セットAがセットBの上位集合かどうか確認します。
セットA.issuperset(セットB)
セットA >= セットB

# セットAとセットBが共通要素を持たないか確認します。
セットA.isdisjoint(セットB)
メソッド一覧
メソッド / 演算子概要
セットA.issubset(セットB) / <=セットAのすべての要素がセットBに含まれる場合に『True』を返します。AとBが等しい場合も『True』になります。
セットA < セットBセットAがセットBの真部分集合(AはBに含まれ、かつAとBが等しくない)の場合に『True』を返します。
セットA.issuperset(セットB) / >=セットBのすべての要素がセットAに含まれる場合に『True』を返します。AとBが等しい場合も『True』になります。
セットA > セットBセットAがセットBの真上位集合(BはAに含まれ、かつAとBが等しくない)の場合に『True』を返します。
セットA.isdisjoint(セットB)セットAとセットBに共通の要素が1つもない場合に『True』を返します。
サンプルコード
# セットを用意します。
all_permissions = {'read', 'write', 'execute', 'delete'}
user_permissions = {'read', 'write'}
guest_permissions = {'read'}

# issubset(): 部分集合の確認
print(user_permissions.issubset(all_permissions))   # 『True』: userはallの部分集合
print(user_permissions <= all_permissions)           # 同じく『True』

# 等しいセットは部分集合でもある
print(all_permissions <= all_permissions)  # 『True』

# 真部分集合(等しくない部分集合)の確認
print(user_permissions < all_permissions)  # 『True』
print(all_permissions < all_permissions)   # 『False』: 等しいので真部分集合ではない

# issuperset(): 上位集合の確認
print(all_permissions.issuperset(user_permissions))  # 『True』
print(all_permissions >= user_permissions)           # 同じく『True』

# isdisjoint(): 共通要素がないか確認
admin_only = {'delete', 'execute'}
print(guest_permissions.isdisjoint(admin_only))  # 『True』: 共通要素なし
print(user_permissions.isdisjoint(admin_only))   # 『False』: executeは重複なしだがwriteは共通でない
# 確認します
print({'write'}.isdisjoint({'execute', 'delete'}))  # 『True』: 共通要素なし

# 実用例: 必要な権限を全て持っているか確認します。
required = {'read', 'write'}
has = {'read', 'write', 'execute'}
if required.issubset(has):
    print('必要な権限が揃っています。')
概要

『issubset()』は「AはBの中に完全に含まれるか」を確認し、『issuperset()』は「AはBを完全に含むか」を確認します。どちらも両方のセットが等しい場合は『True』を返します。等しい場合を除外したい場合は『<』や『>』の演算子(真部分集合・真上位集合)を使ってください。

『isdisjoint()』はセットに共通要素が1つもない場合に『True』を返します。『セットA & セットB == set()』と同じ意味ですが、『isdisjoint()』のほうが効率よく動作します。

メソッドの引数にはリストなどのイテラブルも渡せますが、演算子(<=, >=, <, >)を使う場合は両辺がセットである必要があります。

セットの集合演算(和・積・差)は『セット.union() / セット.intersection() / セット.difference()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。