Pythonのセットの比較演算(issubset() / issuperset() の使い方)をやさしく解説!初心者でもわかるセット比較
生徒
「先生、Pythonのセットで『あるセットが別のセットに全部含まれているか』を調べる方法はありますか?」
先生
「はい、それはissubset()メソッドを使います。これは『部分集合かどうか』を調べるためのものです。」
生徒
「逆に『あるセットが別のセットを全部含んでいるか』を調べる方法は?」
先生
「それはissuperset()メソッドを使います。『上位集合かどうか』を調べるメソッドです。順番に説明しましょう。」
1. issubset()とは?部分集合の判定
issubset()メソッドは「あるセットのすべての要素が、別のセットに含まれているか」を調べます。たとえば、友達グループAのメンバー全員が、友達グループBにもいる場合、AはBの部分集合です。
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
print(a.issubset(b)) # True
print(b.issubset(a)) # False
True
False
上の例では、セット(a)はセット(b)の中に全て含まれているため、Trueとなります。逆は含まれていないのでFalseです。
2. issuperset()とは?上位集合の判定
issuperset()メソッドは「あるセットが、別のセットのすべての要素を含んでいるか」を調べます。つまり、セットが別のセットを丸ごと内包しているかを調べる時に使います。
a = {1, 2, 3, 4, 5}
b = {2, 3}
print(a.issuperset(b)) # True
print(b.issuperset(a)) # False
True
False
セット(a)はセット(b)のすべての要素を含んでいるのでTrueです。逆は含んでいないのでFalseとなります。
3. 例えでわかるissubset()とissuperset()
集合のイメージは「箱」に例えられます。
issubset()は「小さい箱が大きい箱の中にすっぽり入っているか?」を聞いているのに対し、
issuperset()は「大きい箱が小さい箱を丸ごと包んでいるか?」を確認しています。
例えば、
「好きな果物セットA」と「持っている果物セットB」で考えてみましょう。
好きな果物Aが全部持っている果物Bに含まれていれば、好きな果物は持っている果物の部分集合です。
4. issubset()とissuperset()の戻り値は?
どちらのメソッドも、結果は真偽値(TrueかFalse)で返します。
条件を満たせばTrue、満たさなければFalseとなります。
プログラミングで「条件が合っているかどうか」を判定する基本的な方法の一つです。
5. セットの比較演算で気をつけること
セットは順序(並び)がなく、重複しない特徴があります。そのため、issubset()やissuperset()は「要素の含み具合」だけを調べます。
順序は気にしません。
また、空のセットはどのセットにも部分集合として含まれるので、set()はどんなセットの部分集合としてもTrueとなります。
6. セットの比較演算の便利な使い方
セットの比較演算は、例えば以下のような場面で役立ちます。
・ユーザーの持つ権限が必要な権限を満たしているかのチェック
・買い物リストがすでに持っているものに含まれているか確認
・データの重複や包含関係の検証
Pythonのセットはこのように、比較演算をシンプルに書けるので便利です。
まとめ
今回の記事では、Pythonのセット(set)に用意されている比較演算メソッドである issubset()とissuperset()について、基本から丁寧に確認してきました。 セットは「重複しない要素の集まり」という特徴を持つデータ型で、要素の順番を持たない点が大きな特徴です。 そのため、リストやタプルとは違い、「含まれているかどうか」「すべて揃っているか」といった 集合としての関係性を調べる処理がとても得意です。
issubset()は、「このセットの中身は、すべて別のセットに含まれているか?」を調べるためのメソッドでした。
部分集合かどうかを判定する場面で使われ、権限チェックや条件判定など、実務でもよく登場します。
一方でissuperset()は、「このセットは、別のセットを丸ごと含んでいるか?」を確認するメソッドで、
上位集合かどうかを調べたいときに役立ちます。
この2つは表裏一体の関係にあり、どちらも真偽値(True / False)を返すため、
if文などの条件分岐と非常に相性が良いのもポイントです。
また、セットの比較では順番は一切関係ないことも重要でした。 要素が同じであれば、並び順が違っていても結果は変わりません。 さらに、空のセットはすべてのセットに含まれるという集合のルールも、 プログラムを書く上で知っておくと混乱を防げます。 こうした集合の考え方を理解しておくことで、Pythonのセット操作が一気に扱いやすくなります。
セット比較の確認用サンプルプログラム
ここで、記事内容を振り返るためのシンプルなサンプルをもう一度確認してみましょう。 セットの包含関係をチェックする基本的な書き方です。
required = {"read", "write"}
user_permissions = {"read", "write", "delete"}
# ユーザーの権限が必要条件を満たしているか
print(required.issubset(user_permissions))
# 管理者権限かどうかのチェック
print(user_permissions.issuperset(required))
True
True
このように、issubset()とissuperset()を使うと、
複雑なループや条件分岐を書かなくても、
「含まれているか」「満たしているか」を一行で安全に判定できます。
セットの比較演算は、コードを短く、読みやすく保つための強力な武器になります。
生徒
「issubset()とissuperset()って、最初は名前だけ見ると難しそうでしたけど、 実際は『全部含まれているか』を調べているだけなんですね。」
先生
「その通りです。集合の考え方を知っていれば、とても直感的なメソッドなんですよ。 if文と組み合わせると、条件チェックが一気に簡単になります。」
生徒
「順番を気にしなくていいのも便利ですね。 リストだと同じことをやろうとすると、結構大変そうです。」
先生
「そうですね。セットは『存在しているかどうか』を扱うのが得意です。 権限管理やチェック処理では特に活躍しますよ。」
生徒
「これなら、自分のプログラムでも条件判定をすっきり書けそうです。 セットの比較演算、しっかり使ってみます!」
先生
「ぜひ使ってみてください。今回の内容を理解できたなら、 Pythonのデータ構造の扱い方が一段レベルアップしていますよ。」