Setは重複のない要素をもつ順序なしのコレクションオブジェクト。
リストから重複する要素を取り除いたり、積集合・和集合・差集合のような集合演算を使うために使用します。
>>> s = {1, 2, 3} # 以前はsetのリテラルがなかったため set([1, 2, 3])のように書いていました。
>>> s
{1, 2, 3}
>>> s.add(3) #重複するので変化ない
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> l = ["hello", "world", "apple", "world", "python", "apple"] #重複する要素をもつリスト
>>> l
['hello', 'world', 'apple', 'world', 'python', 'apple']
>>> list(set(l)) #setを作成して重複を取り除いて再びリスト化する
['python', 'world', 'hello', 'apple']
集合演算
和集合、差集合、積集合(共通部分)、対象差(排他的論理和)
>>> s = {1, 2, 3}
>>> s.union({3, 4, 5}) #和集合
{1, 2, 3, 4, 5}
# もしくは s | { 3, 4, 5} と書いても同じ
>>> s | {3, 4, 5}
{1, 2, 3, 4, 5}
>>> s.difference({3, 4, 5}) #差集合
{1, 2}
# もしくは s - { 3, 4, 5} と書いても同じ
>>> s - {3, 4, 5}
{1, 2}
>>> s.intersection({3, 4, 5}) #積集合 (共通部分)
{3}
# もしくは s & { 3, 4, 5} と書いても同じ
>>> s & { 3, 4, 5}
{3}
>>> s.symmetric_difference({3, 4, 5}) #どちらか一方に属する要素
{1, 2, 4, 5}
# もしくは s ^ { 3, 4, 5} と書いても同じ
>>> s ^ { 3, 4, 5}
>>> s.issubset({3, 1, 2, 5}) # sが [3, 1, 2, 5]の部分集合である場合True
True
>>> s.issubset({3, 1, 5})
False
>>> s.issuperset({3, 1}) # [3, 1]がsの部分集合の場合True
True
>>> s.issuperset({3, 1, 2})
True
>>> s.issuperset({3, 1, 2, 5})
False