【Python】集合setが便利すぎる!特徴や主なメソッドをつらつらと

Programming

Pythonを勉強していて、コンテナの一つであるsetが便利すぎて感動したので特徴や使い方などまとめてみようと思います。

PythonのSet(集合)とは?

Set(集合)はリストと似た構造をしていますが、中身に同じ要素の重複を許しません。数学的な意味での集合と同じように考えていいですね。ちなみにsetは要素の追加も可能ですが、重複する要素を追加した時は自動的にその要素が削除されます。

これって実用的なアプリケーションを作る上で結構使える仕様な気がします。実際、私もSwiftでアプリ開発したときに重複する要素の削除機能が欲しかったことがあるんですが、その時はNSSetを利用して重複の削除を行いました。

順序に関する情報がないだけあって、要素の探索は高速です。

リテラルは{a,b}のように波括弧を使って表現します。

Set(集合)の追加・削除メソッド

追加

  • add(item)  itemを追加します。
  • update(iterable) イテラブル(iterable)な要素を全て追加します。

削除

  • clear()  全要素を削除します。
  • pop() 何れかの要素を削除します。
  • remove(item)  itemを削除します。(itemが存在しないとエラー)
  • discard(item) itemを削除します。(itemが存在しなくてもエラーにならない)

listと違ってsetには順序がないので、popはどの要素を削除するのか指定できません。
どう考えても要素の削除にはdiscard一択な気がしますが…

Set(集合)の集合メソッド

これがめっちゃ便利です。数学の集合論を少しでも分かっているなら、かなり直感的に集合を扱うことができます。

共通要素の判定

isdisjoint(other) otherと共通する要素がなければTrueです。

部分集合の判定

issubset(other) otherの部分集合であればTrueを返します。
issuperset(other) otherが部分集合であればTrueを返します。
これどっちがどっちかわからなくならないように注意しましょう。

issubsetは対象set is subset(・・・部分集合)なので、対象が引数に対する部分集合であるかどうかを、
issupersetは対象set is superset(・・・上位集合)なので、引数が対象に対する上位集合であるかどうかを
判定します。

集合のコピー

copy() その集合のコピーを返します。

集合の演算

  • difference(other) otherの要素を削除した集合(差集合)を返します。
  • intersection(other) otherと共通の集合(積集合)を返します。
  • symmetric_difference(other) 片方にしか含まれない要素の集合(対称差)を返します。
  • union(other) otherの要素を追加した集合(和集合)を返します。

これらは非常に便利なメソッドですね。特に積集合なんか共通のナニカを見つけるというサービスを開発するときにめちゃくちゃ役に立ちそう。

まとめ

PythonのSetには非常に便利なメソッドが多く仕込まれていますね〜。もしかしたらSwiftにもあるのかな?改めて文法を学ぶ重要性に気づかされました。

コメント

タイトルとURLをコピーしました