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環境にアップしております。
下記からダウンロードいただけます。