Categories: Python

【Python】frozensetの使い方と集合演算

この記事では、Pythonのfrozensetについて解説します。

frozensetは、更新できない(イミュータブルな)setです。 通常のsetについて詳しく知りたい方は、以下の記事を参照してください。

Linkset(セット)の使い方と集合演算

それでは、実際のコード例を交えながら、frozensetの基本的な使い方や集合演算の方法を見ていましょう!

frozensetとは?

frozensetは、setの基本的な性質を受け継いだ型となっています。

setと異なる点は、要素の追加や削除ができなくなっていることです。なので、addメソッドなどの要素を変更するようなメソッドは定義されていません。

ただし、集合演算用のメソッドは存在するので集合演算のみに使用するなら他で値を変更できないfrozensetを使った方が安全に扱うことができます。

また、イミュータブルなオブジェクトなので辞書のキーに使ったり、setに格納できます。

frozensetの特徴

これらのことを踏まえた上で使い方を見ていきましょう!

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ですが、集合演算に使う場合はこちらの方が安全に演算することができます。

では今回の内容はここまでです。それではまたどこかで〜( ・∀・)ノ

set(セット)の使い方と集合演算

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago