4.1 ルールに基づくサブセットの取得
サブセットは、ある集合のすべての要素が他の大きな集合に属しているものです。Pythonにはサブセットを扱うためのいくつかの組み込みメソッドやオペレーターがあります。ここでは、サブセットの取得方法、ある集合が他の集合のサブセットであるかどうかの確認方法、およびこれらの知識をさまざまなシナリオで使用する方法について説明します。
forループの使用
空の集合を作成し、forループを使って条件を満たす要素を追加できます。
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set()
for x in my_set:
if x % 2 == 0:
even_set.add(x)
print(even_set) # 出力: {2, 4, 6, 8, 10}
これはサブセットを作成する最も簡単で明白な方法です。しかし、他にもいくつかのコンパクトな方法があります。
filter()関数の使用
filter()関数は、各要素に対して関数を適用し、関数がTrueを返した要素だけを返します。結果は再び集合に変換する必要があります。
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set(filter(lambda x: x % 2 == 0, my_set))
print(even_set) # 出力: {2, 4, 6, 8, 10}
filter()関数内ではラムダ式が使われます。これは、フィルタリングのための簡潔な方法です。ラムダについては数回の講義の後で詳しく説明します。
4.2 集合の生成器の使用
List Comprehensionを覚えていますか?リストとその要素を素早く生成する方法として角括弧を使いましたね。この文法ツールはこんな感じでした:
[式 for 変数 in シーケンス]
ここで:
-
変数— 何らかの変数の識別子、 -
シーケンス— この変数が取る値のシーケンス(リスト、文字列、またはrange関数によって得られたオブジェクトである可能性があります)、 -
式— 通常生成器で使用された変数に依存する式で、リストの要素を埋めるものです。
集合にも同様の関数がありますが、波括弧を使う必要があります:
{式 for 変数 in シーケンス}
集合の生成器は既存の集合をベースに、フィルタリング条件を適用しながら新しい集合を簡単に作成できます。
以下は、集合から偶数要素だけを選ぶ方法です:
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = {x for x in my_set if x % 2 == 0}
print(even_set) # 出力: {2, 4, 6, 8, 10}
そしてこちらは文字列だけの場合:
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, "apple", "banana"}
even_set = {x for x in my_set if type(x) == str}
print(even_set) # 出力: {"apple", "banana"}
4.3 要素の存在チェック
集合で実行できる基本的な操作の1つは、要素が集合に存在するかのチェックです。Pythonにはこれを行ういくつかの方法があります。さまざまな方法を見ていきましょう。
inオペレーターの使用
集合内に要素が存在するかを確認する最も一般的で便利な方法はinオペレーターを使用することです。この方法は、要素が集合に存在する場合はTrueを返し、存在しない場合はFalseを返します。
my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # 出力: True
print(6 in my_set) # 出力: False
not inオペレーターの使用
not inオペレーターはinオペレーターの逆で、要素が集合に存在しないことを確認するために使用されます。このメソッドは、要素が集合に存在しない場合はTrueを返し、存在する場合はFalseを返します。
my_set = {1, 2, 3, 4, 5}
print(6 not in my_set) # 出力: True
print(3 not in my_set) # 出力: False
ループの使用
要素が集合に存在するかを確認するためにループを使用するのは最も効率的な方法ではありませんが、より複雑なデータ構造を扱う場合や追加の操作を行う場合に役立ちます。
my_set = {1, 2, 3, 4, 5}
element = 3
found = False
for item in my_set:
if item == element:
found = True
break
print(found) # 出力: True
4.4 集合のネストの確認
Pythonは、ある集合が他の集合のサブセットかどうかを確認するためにオペレーター <=とメソッド issubset()を提供しています。
<= オペレーターの使用
<=オペレーターは、ある集合が他の集合のサブセットかどうかを簡単に確認することができます。
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
print(set_a <= set_b) # 出力: True
print(set_b <= set_a) # 出力: False
issubset() メソッドの使用
issubset()メソッドは<=オペレーターと同じ機能を果たし、ある集合のすべての要素が他の集合に含まれている場合にTrueを返します。
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
print(set_a.issubset(set_b)) # 出力: True
print(set_b.issubset(set_a)) # 出力: False
スーパーセットの確認
サブセットと同様に、ある集合が他の集合のスーパーセットかどうかを確認することもできます。これはオペレーター >=やメソッド issuperset()を使って行えます。
オペレーター >= の使用
set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
print(set_a >= set_b) # 出力: True
print(set_b >= set_a) # 出力: False
メソッド issuperset() の使用
set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
print(set_a.issuperset(set_b)) # 出力: True
print(set_b.issuperset(set_a)) # 出力: False
GO TO FULL VERSION