この記事では、Pythonのfrozensetについて解説します。
frozensetは、更新できない(イミュータブルな)setです。 通常のset
について詳しく知りたい方は、以下の記事を参照してください。
それでは、実際のコード例を交えながら、frozenset
の基本的な使い方や集合演算の方法を見ていましょう!
frozensetとは?
frozensetは、setの基本的な性質を受け継いだ型となっています。
setと異なる点は、要素の追加や削除ができなくなっていることです。なので、add
メソッドなどの要素を変更するようなメソッドは定義されていません。
ただし、集合演算用のメソッドは存在するので集合演算のみに使用するなら他で値を変更できないfrozenset
を使った方が安全に扱うことができます。
また、イミュータブルなオブジェクトなので辞書のキーに使ったり、set
に格納できます。
- 不変(イミュータブル)
- 重複する要素を持てない
- 並びを保持しない
- 集合演算できる
これらのことを踏まえた上で使い方を見ていきましょう!
frozensetの使い方
frozenset
の基本的な使い方を見ていきます。
生成・初期化
空のfrozenset
オブジェクトを生成するには、frozenset()
を使います。
変数 = frozenset()
引数にイテラブルオブジェクトを渡すことで初期化できます。
変数名 = frozenset(イテラブルオブジェクト)
要素へのアクセス
frozenset
は、セットと同様にインデックスで要素にアクセスすることができません。なので、一時的にリストに変換するか、for
文で要素を取得しましょう。
# 初期化
fs = frozenset([1, 2, 3])
# リストに変換する
fs_list = list(fs)
print(fs_list[0])
# for文を使う
for val in fs:
print(val)
集合演算
frozenset
は、set
と同様に集合演算を行えます。
和集合
union
メソッド、または |
演算子を使って和集合を計算できます。和集合とは、「どちらか片方には存在する要素」のことです。
frozenset.union(イテラブルオブジェクト)
frozenset1 | frozenset2
試しに和集合を計算してみます。
vals1 = frozenset([1, 2])
vals2 = frozenset([3, 4])
union = vals1.union(vals2)
print(union)
union = vals1 | vals2
print(union)
実行結果
frozenset({1, 2, 3, 4})
frozenset({1, 2, 3, 4})
union
メソッド には、複数の配列を指定可能でリスト・タプルも指定できます。
vals1 = frozenset([1, 2])
vals2 = frozenset([3, 4])
union = vals1.union(vals2, [5, 6], (7, 8))
print(union)
実行結果
frozenset({1, 2, 3, 4, 5, 6, 7, 8})
積集合
intersection
メソッド、または&
演算子を使って積集合を計算できます。積集合とは、「両方に入っている要素」のことです。
frozenset.intersection(イテラブルオブジェクト)
frozenset1 & frozenset2
試しに積集合を計算してみます。
vals1 = frozenset([1, 2, 3])
vals2 = frozenset([2, 3, 4])
intersection = vals1.intersection(vals2)
print(intersection)
intersection = vals1 & vals2
print(intersection)
実行結果
frozenset({2, 3})
frozenset({2, 3})
intersection
メソッドは、複数の配列を指定可能でリストやタプルも指定できます。
vals1 = frozenset([1, 2, 3, 4])
vals2 = frozenset([2, 3, 4, 5])
intersection = vals1.intersection(vals2, [3, 4, 5, 6], (4, 5, 6, 7))
print(intersection)
実行結果
frozenset({4})
差集合
difference
メソッド、または-
演算子を使って差集合を計算できます。差集合とは、「ある集合から別の集合の要素を取り除いて残った要素」のことです。
frozenset.difference(イテラブルオブジェクト)
frozenset1 - frozenset2
試しに差集合を計算してみます。
vals1 = frozenset([1, 2, 3])
vals2 = frozenset[(2, 3, 4])
difference = vals1.difference(vals2)
print(difference)
difference = vals1 - vals2
print(difference)
実行結果
frozenset({1})
frozenset({1})
difference
メソッドは、複数の配列を指定可能でリスト・タプルも指定できます。
vals = frozenset({1, 2, 3, 4, 5})
difference = vals.difference([2, 3], (4, 5))
print(difference)
実行結果
frozenset({1})
対称差集合
symmetric_difference
メソッド、または ^
演算子を使って対称差集合を計算できます。対称差集合とは、「どちらか片方のみに存在する要素」を集めます。
frozenset.symmetric_difference(セットまたはフローズンセット)
frozenset1 ^ frozenset2
試しに対称差集合を計算してみます。
vals1 = frozenset({1, 2, 3})
vals2 = {2, 3, 4}
s_d = vals1.symmetric_difference(vals2)
print(s_d)
s_d = vals1 ^ vals2
print(s_d)
実行結果
frozenset({1, 4})
frozenset({1, 4})
symmetric_difference
メソッドは、同時に複数の配列を指定できません。同時に複数の計算がしたい場合は、演算子を使ってください。
vals1 = frozenset({1, 2, 3})
vals2 = {2, 3, 4}
s_d = vals1 ^ vals2 ^ {3, 4, 5}
print(s_d)
実行結果
frozenset({1, 3, 5})
まとめ
この記事では、frozenset
の使い方を解説しました。
frozenset
はPythonの組み込み関数であり、イミュータブル(不変)なset
(集合)を作成することができました。
set
よりもさらに縛りが強いfrozenset
ですが、集合演算に使う場合はこちらの方が安全に演算することができます。
では今回の内容はここまでです。それではまたどこかで〜( ・∀・)ノ