2021-03-28に投稿

Python 集合型 set

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

setの定義

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

集合の濃度(サイズ)

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

要素の存在判定

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

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

集合が等しいか

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

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

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

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

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

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

集合の包含関係

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

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

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

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

真部分集合

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

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

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

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

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

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

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

真上位集合

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

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

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

和集合

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

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

共通部分

s1 = set({2, 3, 5, 7, 11})
s2 = set({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 = set({2, 3, 5, 7, 11})
s2 = set({2, 4, 6, 7})
s1.symmetric_difference(s2) # => {3, 4, 5, 6, 11}
s1 ^ s2  # => {3, 4, 5, 6, 11}

コピー

s1 = set({2, 3, 5, 7, 11})
s2 = s1.copy()
s2 # => {2, 3, 5, 7, 11}

集合の操作

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

s1.update(s2)
s1 # => {2, 3, 4, 5, 6, 7, 11}
# s1 |= s2 と同じ
s1 = set({2, 3, 5, 7, 11})
s2 = set({2, 4, 6, 7})

s1.intersection_update(s2)
s1 # => {2, 7}
# s1 &= s2 と同じ
s1 = set({2, 3, 5, 7, 11})
s2 = set({2, 4, 6, 7})

s1.difference_update(s2)
s1 # => {3, 5, 11}
# s1 -=s2 と同じ
s1 = set({2, 3, 5, 7, 11})
s2 = set({2, 4, 6, 7})

s1.symmetric_difference_update(s2)
s1 # => {3, 4, 5, 6, 11}
# s1 ^=s2 と同じ

要素の追加と除外

s1 = set({1, 2})

# 要素の追加
s1.add(3) #=> {1, 2, 3}

# 要素の除外
s1.remove(2)
s1 # => {1, 3}
s1.discard(1)
s1 # => {3}
s1.pop() # => 3を返す
s1 # => {}

s1.discard(9)
# 以下はエラー
# s1.remove(9) # =&gt; KeyError: 9
# s1.pop() # =&gt; KeyError: 'pop from an empty set'

クリア

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

maru3kaku4kaku

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

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

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

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

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

コメント