【Python】集合型を扱ってみよう!

Pythonロゴ

Pythonには変数として「数値」「文字列」「配列」「辞書」など複数のタイプがあります。 こちらの記事では「集合」についてまとめてみました。

集合型について

集合型はリストやタプルと同じ配列ですが、要素を重複することができない配列になります。また順番も保持することができません。
集合型にはset型とfrozenset型の2パターンがあります。

set型について

波括弧 {} の中に要素を入力する事で集合として保存されます。
辞書型はキーと要素をセットで保存しますが、集合は要素のみ複数格納できます。

set型の集合を生成

set1 = {'a', 'b', 'c'}
# or
set1 = set({'a', 'b', 'c'})

print(set1)
print(type(set1))

# 結果
# {'b', 'c', 'a'}  # 順番が保管されないためバラバラで表示されます
# <class 'set'>

要素の一意化

重複した情報を意図的に入れた場合、自動でまとめられるようになります。

set5 = {'a', 'b', 'c', 'd', 'b', 'c'}
print(set5)

# 結果 {'a', 'd', 'c', 'b'}

要素の追加

set2 = {'a', 'b', 'c'}
set2.add('z')  # zの要素追加
print(set2)

# 結果 {'b', 'c', 'z', 'a'}

要素の削除

set3 = {'a', 'b', 'c'}
set3.remove('c')  # cの要素削除
print(set3)

# 結果 {'b', 'a'}

要素を取得して削除 (ランダム)

set4 = {'a', 'b', 'c'}
txt4 = set4.pop()
print(txt4)
print(set4)

# 結果
# b
# {'a', 'c'}

frozenset型について

set型の変数にタプルと同じ格納した値を変更する事ができないルールが追加された型になります。

frozenset型の集合を生成

set5 = frozenset({'a', 'b', 'c'})

print(set5)
print(type(set5))

# 結果
# frozenset({'a', 'c', 'b'})
# <class 'frozenset'>

frozenset型に設定された変数は追加・変更・削除をすることができません。

set6 = frozenset({'a', 'b', 'c'})
set6.add('z')  # zの要素追加
print(set6)

# 結果
# Traceback (most recent call last):
#  File "/opt/project/set.py", line 2, in <module>
#    set6.add('z')  # zの要素追加
# AttributeError: 'frozenset' object has no attribute 'add'

集合演算について

set型の集合には集合演算を使用することができます。
集合演算には和集合(|)、差集合(-)、積集合(&)、対称差(^)の4点が存在し下記演算内容で処理されます。

和集合(|)

2つの集合を比べて存在する要素を全て出力します。

set7a = {'a', 'b', 'c'}
set7b = {'c', 'd'}
print(set7a | set7b)

# 結果 {'d', 'b', 'a', 'c'}

差集合(-)

2つの集合を比べて左側の集合のみ存在する要素を出力します。

set8a = {'a', 'b', 'c'}
set8b = {'c', 'd'}
print(set8a - set8b)

# 結果 {'b', 'a'}

積集合(&)

2つの集合を比べて両方に存在する要素を出力します。

set9a = {'a', 'b', 'c'}
set9b = {'c', 'd'}
print(set9a & set9b)

# 結果 {'c'}

対称差(^)

2つの集合を比べて互いに存在しない要素を出力します。

set10a = {'a', 'b', 'c'}
set10b = {'c', 'd'}
print(set10a ^ set10b)

# 結果 {'a', 'b', 'd'}

まとめ

集合に関して基本的な部分を再確認いたしました。
次回からはフロー制御に関して確認していきます。

サンプルプログラム

こちらの記事で作成したプログラムはGitHub環境にアップしております。
下記からダウンロードいただけます。

参考 set.py スクリプトGitHub python-beginner Pythonロゴ【Python】辞書型を扱ってみよう!