今回は、Pythonにおける集合型(Set型)について説明します。
集合型とは?
集合型(Set型)とは、重複する要素を一切持たない、「集合」を扱うことができるデータ型のことです。
集合型オブジェクトを定義する
集合型のオブジェクトを定義する場合は、波括弧{}を使います。リストを作る場合とは少し異なるので、注意が必要です。
例:集合型を定義する(リストの場合と比較)
list_1 = [1,2,2,3,3,3,4,4,5,6,7] #リスト
set_1 = {1,2,2,3,3,3,4,4,5,6,7} #集合型(Set型)
print(list_1)
print(set_1)
上記コードを実行してみると、リストと集合型との性格の違いがよく分かると思います。
リスト(list_1)では重複している要素もそのまま格納されていますが、集合型(set_1)では重複している要素は全て削除されています。
和集合、差集合、積集合、対称差集合について
集合には、「和集合」、「差集合」、「積集合」、「対称差集合」という概念があります。高校数学で集合を勉強したことがある人であればすぐに分かるのではないかと思います。画像を活用して、それぞれの集合を表現してみます。
和集合
2つの集合Aと集合Bについて、AとB全ての領域を含む集合のことを「和集合」と言います。Pythonでは、これを” | “を使って表します。
list_1 = [1,2,2,3,3,3,4,4,5,6,7] #リスト
set_1 = {1,2,2,3,3,3,4,4,5,6,7} #集合型(Set型)
set_2 = {2,3,3,4,5,8,9}
print(set_1 | set_2) #set_1とset_2の和集合
差集合
集合Bから、集合Aに含まれる要素を切り取った下の画像のような集合を「差集合」と言います。Pythonでは、引き算と同じように” – “を使って表されます。
set_1 = {1,2,2,3,3,3,4,4,5,6,7} #集合型(Set型)
set_2 = {2,3,3,4,5,8,9}
print(set_1 - set_2) #差集合
上の例では、集合set_1からset_2を引いた集合を出力しています。つまり、set_1の要素の中からset_2にも含まれている要素を除外しています。
積集合
集合Aと集合B両方に該当する要素だけを取り出した集合が、「積集合」です。Pythonでは、” & “を使って表されます。
set_1 = {1,2,2,3,3,3,4,4,5,6,7} #集合型(Set型)
set_2 = {2,3,3,4,5,8,9}
print(set_1 & set_2) #積集合
上のコードでは、set_1とset_2両方の集合に含まれている要素だけが出力されます。
対称差集合
集合Aと集合Bどちらかにだけ含まれる要素の集合、つまり和集合から積集合を引いたものを「対称差集合」と言います。Pythonでは、” ^ “を使って表されます。
set_1 = {1,2,2,3,3,3,4,4,5,6,7} #集合型(Set型)
set_2 = {2,3,3,4,5,8,9}
print(set_1 ^ set_2) #対称差集合
集合型オブジェクトを作るメソッド
最後に、集合型オブジェクトを簡単に作るメソッドを紹介します。
set()を使うと、文字列やリストなどを簡単に集合型オブジェクトに変換できます。
list_1 = [1,2,2,3,3,3,4,4,5,6,7] #リスト
print(set(list_1)) #集合型に変換
a = "abababtbtb" #文字列
print(set(a)) #集合型に変換
set()は意外とよく使うメソッドなので、覚えておくと良いでしょう。