タイトル画像
琴葉茜

今回は、「集合型(set型)」について紹介するよ!

解説画像1
琴葉葵

集合型は配列型とはなにが違うの??

琴葉茜

配列型との1番の違いは「要素は絶対に重複しない」ってことだよ

解説画像2
琴葉葵

それって何か便利なの??

琴葉茜

例えば、某遊園地で過去1ヶ月に入場予約した人に向けてキャンペーン用のメールが2重で送らないようにしたい時に便利かな

琴葉葵

なるほど!1ヶ月に何回も行く人がいるかもしれないもんね!

琴葉茜

また、集合型にした後に出来ることが便利なんだ

琴葉葵

ただ重複を無くすだけじゃないんだね

琴葉茜

むしろここからが大事で、2つの集合型の要素について調べることができるんだ
例えば、2つの集合を合わせた要素を取り出す時はこんな感じ

解説画像3
琴葉葵

前回の辞書型で出てきた記号だ!
これって、数学で習う「和集合」と同じだね...って、集合型ってその「集合」のことなんだね!

琴葉茜

そうだね!和集合以外にも「積集合」「差集合」「対称差集合」も同じように扱えるよ
今回はそれぞれの集合を表す「ベン図」と一緒に紹介しておくね

解説画像4
琴葉葵

これは知っていれば便利だね!

琴葉茜

別に覚えなくても配列で重複を無くすプログラムを書ければ大丈夫なんだけど、知っていれば効率よくプログラミングできるから損はないと思うよ!

琴葉茜

操作については一覧表にしておくからまた確認してね

構文機能
set([1, 2, 2, 3])重複を取り除いて集合を作成{1, 2, 3}
a | b和集合(両方の要素){1, 2} | {2, 3}{1, 2, 3}
a & b積集合(共通する要素){1, 2} & {2, 3}{2}
a - b差集合(aにあってbにない){1, 2} - {2, 3}{1}
a ^ b対称差集合(どちらか一方のみ){1, 2} ^ {2, 3}{1, 3}
a.isdisjoint(b)2つの集合が素であるか(共通要素がないか){1, 2}.isdisjoint({3, 4})True
a.add(x)要素の追加a.add(4)
a.remove(x)要素の削除(なければエラー)a.remove(2)
a.discard(x)要素の削除(なければ無視)a.discard(2)
a.clear()すべての要素を削除a.clear()
← 横にスクロールして確認しよう! →
琴葉葵

おねーちゃん!早速試してみたんだけど、3つの集合の中で重複がない要素だけを出したいと思って対称差集合を使ったんだけど、「3」が入っちゃってるのおかしくない?

解説画像5
琴葉茜

それは初めて集合型を使った人がハマりやすい間違いだね
この場合の実際の処理は「(a ^ b) ^ c」って感じで左から順番に処理されるから、「(a ^ b)」で一度消えて、その後に復活するんだよ

琴葉葵

じゃあどうしたらうまくいくの?

琴葉茜

例えば、「3つの集合の全ての要素から重複している要素を引く」というプログラムを明示的に作ると良いかな

解説画像6
琴葉葵

これは気をつけとかないとね汗