まぬねこの足跡。。。

備忘録+たのしさ+ひっそりと

Python 集合(set)

概要

  • 重複も順序もない要素のあつまり
  • 順序がないため、インデックス指定での要素取得はできない。

集合 生成

「{}」、set()

空集合はset()のみ

set1= {2, 3, 2, 3, 1, 3, 1, 3, 3, 1}
print(set1)
print(type(set1))
# リストから
set2= set(['卯月', '皐月', '卯月', '水無月','卯月'])
print(set2)
print(type(set2))
# 空集合から
set3=set()
print(set3)
print(type(set3))
# タプルから
set4=set(('卯月', '皐月', '卯月', '水無月','卯月'))
print(set4)
print(type(set4))
# 辞書から
set5=set({'卯月': '4月', '皐月': '5月', '水無月': '6月'})
print(set5)
print(type(set5))

表示イメージ

{1, 2, 3}
<class 'set'>
{'卯月', '皐月', '水無月'}
<class 'set'>
set()
<class 'set'>
{'卯月', '皐月', '水無月'}
<class 'set'>
{'卯月', '皐月', '水無月'}
<class 'set'>

セット 組み込み関数

  • len(set)・・・要素数
  • x,y,z = set・・・ 多重代入
  • 判定
    • 値 in set・・・集合に含むか
    • 値 not in set・・・集合に含まないか

セット 集合演算

  • 和集合「|」
  • 積集合「&」
  • 差集合「-」
  • 対称差「^」

※メソッドもある。後述記載

# 和集合
print({1, 2, 3, 4} | {3, 4, 5, 6})
# 積集合
print({1, 2, 3, 4} & {3, 4, 5, 6})
# 差集合
print({1, 2, 3, 4} - {3, 4, 5, 6}) 
# 対称差
print({1, 2, 3, 4} ^ {3, 4, 5, 6})

表示イメージ

{1, 2, 3, 4, 5, 6}
{3, 4}
{1, 2}
{1, 2, 5, 6}

セット 比較合演算

  • 同一か判定「値==set」
  • 相違か判定「値!=set」
  • 包括関係
    • 値を全部含むか判定「値<=set」
    • 値を全部含み、集合の方が要素が多いか判定「値<set」]
print({1, 2, 3} <= {1, 2, 3})
print({1, 2} <= {2, 3, 4})
print({2, 3} <= {2, 3, 4})
print()
print({1, 2, 3} < {1, 2, 3})
print({1, 2, 3, 4} < {1, 2, 3})
print({1, 2, 3} < {1, 2, 3, 4})
print({1, 2} < {1, 2, 3})

表示イメージ

{1, 2, 3, 4, 5, 6}
{3, 4}
{1, 2}
{1, 2, 5, 6}

セット メソッド

add・・・要素の追加 ※破壊的

set.add(要素)

set1 = {1, 2, 3}
set1.add(10)
set1

表示イメージ

{1, 2, 3, 10}

add・・・要素の追加 ※破壊的

set.add(要素)

set1 = {1, 2, 3}
set1.add(10)
set1

表示イメージ

{1, 2, 3, 10}

add・・・要素の追加 ※破壊的

set.add(要素)

set1 = {1, 2, 3}
set1.add(10)
set1

表示イメージ

{1, 2, 3, 10}

remove・・・要素の削除 ※破壊的

set.remove(要素)

※削除対象が集合にないとエラー

set1 = {1, 22, 3}
set1.remove(22)
print(set1)
set1.remove(99)

表示イメージ

 {1, 3}
 ----------------------------------------------------------------
 KeyError      Traceback (most recent call last)

discard・・・要素の削除 ※破壊的

set.discard(要素)

※削除対象が集合になくても、エラーにならない。

set1 = {1, 22, 3}
set1.discard(22)
print(set1)
set1.discard(99)

表示イメージ

{1, 3}

clear・・・全要素の削除、空にする ※破壊的

set.clear()

set1 = {1, 2, 3}
set1.clear()
set1

表示イメージ

set()

pop・・・ランダムな要素の1つ取得 ※破壊的

set.pop()

空集合のとき、エラーになる。

set1 = {1, 2, 3}
print(set1.pop())
print(set1)

表示イメージ

1
{2, 3}

集合演算

  • union(set) 和集合
  • intersection(set) 積集合
  • difference(set) 差集合
  • symmetric_difference(set) 対称差
# 和集合
print({1, 2, 3, 4}.union({3, 4, 5, 6}))
# 積集合
print({1, 2, 3, 4}.intersection({3, 4, 5, 6}))
# 差集合
print({1, 2, 3, 4}.difference({3, 4, 5, 6}))
# 対称差
print({1, 2, 3, 4}.symmetric_difference({3, 4, 5, 6}))
表示イメージ
{1, 2, 3, 4, 5, 6}
{3, 4}
{1, 2}
{1, 2, 5, 6}