2021-03-28に投稿

Python 集合型 frozenset

frozensetはPythonの組み込み集合型でイミュータブルです。

frozensetの定義

s1 = frozenset([1, 2, 1, 1, 3])
s2 = frozenset({1, 2, 1, 1, 3})
s3 = frozenset((1, 2, 1, 1, 3))
s4 = frozenset(x+1 for x in range(3))
# => {1, 2, 3}

集合の濃度(サイズ)

s1 = frozenset({2, 3, 5, 7, 11})
len(s1) # => 5

要素の存在判定

s1 = frozenset({2, 3, 5, 7, 11})
len(s1) # => 5

2 in s1 # => True
4 not in s1 # => True

集合が等しいか

s1 = frozenset({1, 2, 3})
s2 = frozenset({1, 2, 3})
s3 = frozenset({1, 5, 7})

s1 == s1 # => True
s1 == s2 # => True
s1 == s3 # => False

s1 != s1 # => False
s1 != s2 # => False
s1 != s3 # => True

集合が共通部分を持たないか

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({4, 6, 8, 10})
s3 = frozenset({5, 10})

s1.isdisjoint(s2) # => True
s2.isdisjoint(s3) # => False

集合の包含関係

部分集合・サブセット・下位集合

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 7})

s1.issubfrozenset(s1) # => True s1 ⊆ s1
s2.issubfrozenset(s1) # => True s2 ⊆ s1
s1.issubfrozenset(s2) # => False s1 ⊈ s2

s1 <= s1 # => True s1 ⊆ s1
s2 <= s1 # => True s2 ⊆ s1
s1 <= s2 # => False s1 ⊈ s2

真部分集合

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 7})

s1 < s1 # => False s1 ⊆ s1
s2 < s1 # => True s2 ⊊ s1
s1 < s2 # => False s1 ⊈ s2

s1.issubfrozenset(s1) and s1 != s1 # => False 
s2.issubfrozenset(s1) and s2 != s1 # => True 
s1.issubfrozenset(s2) and s1 != s2 # => False 

上位集合・スーパーセット

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 7})

s1.issuperfrozenset(s1) # => True s1 ⊇ s1
s2.issuperfrozenset(s1) # => False s2 ⊉  s1
s1.issuperfrozenset(s2) # => True s1 ⊋ s2

s1 >= s1 # => True s1 ⊇ s1
s2 >= s1 # => False s2 ⊉  s1
s1 >= s2 # => True s1 ⊋ s2

真上位集合

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 7})

s1 > s1 # => False s1 ⊇ s1
s2 > s1 # => False s2 ⊉  s1
s1 > s2 # => True s1 ⊋ s2

s1.issuperfrozenset(s1) and s1 != s1 # => False 
s2.issuperfrozenset(s1) and s2 != s1 # => False 
s1.issuperfrozenset(s2) and s1 != s2 # => True 

和集合

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 4, 6, 7})

s1.union(s2) # => {2, 3, 4, 5, 6, 7, 11}
s1 | s2 # => {2, 3, 4, 5, 6, 7, 11}

共通部分

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 4, 6, 7})

s1.intersection(s2) # => {2, 7}
s1 & s2 # => {2, 7}

差集合

s1.difference(s2) # => {3, 5, 11}
s2.difference(s1) # => {4, 6}
s1 - s2 # => {3, 5, 11}
s2 - s1 # => {4, 6}

対称差

s1 = frozenset({2, 3, 5, 7, 11})
s2 = frozenset({2, 4, 6, 7})
s1.symmetric_difference(s2) # => {3, 4, 5, 6, 11}
s1 ^ s2  # => {3, 4, 5, 6, 11}

コピー

s1 = frozenset({2, 3, 5, 7, 11})
s2 = s1.copy()
s2 # => {2, 3, 5, 7, 11}
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント