型の種類 set

 setを使う

 setは集合体とか言われますが、簡単にいうと「要素の重複のない」リストのことです。したがって、要素の追加/削除はできますが、順番の概念がないため、インデックスを使って指定などはできません。setの定義は、set(リスト定義)と記入します。

 >>> s1 = set([1,2,3])
 >>> s1.add(4)
 >>> s1
 set([1, 2, 3, 4]) ←4は問題なく追加されます。
 >>> s1.add(3)
 >>> s1
 set([1, 2, 3, 4]) ←3は元々あるので、追加されません。


 setの演算子

 setは演算子で集合演算できます。演算子は次のものがあります。
演算子 説明
S1|S2 S1とS2の論理和(OR)を返します。
S1とS2に含まれる要素を重複しないようにまとめた集合を返します。
S1&S2 S1とS2の論理積(AND)を返します。
S1とS2のどちらにも含まれる要素の集合を返します。
S1-S2 S1とS2の論理差を返します。
S1からS2に含まれる要素を引いた集合を返します。
S1^S2 S1とS2の排他的論理和(XOR)を返します。
S1とS2のどちらか一方にだけ含まれる要素をもつ集合を返します。

 >>> s1 = set([1,2,3,4])
 >>> s2 = set([3,4,5,6])
 >>> s1|s2
 set([1, 2, 3, 4, 5, 6])
 >>> s1&s2
 set([3, 4])
 >>> s1-s2
 set([1, 2])
 >>> s1^s2
 set([1, 2, 6, 5])


 setのメゾットを使う

 S.add(追加する要素)
 Sに引数を追加し、S自体が書き換わります。引数がSに含まれている場合はSは書き換わりません。
 S.remove(削除する要素)
 Sから引数を削除します。引数が登録されていない場合はエラーになります。
 S.discard(削除する要素)
 removeと同じように引数を削除しますが、引数が登録されていない際でもエラーを発生しません。

 >>> s1 = set([1,2,3,4])
 >>> s1
 set([1, 2, 3, 4])
 >>> s1.remove(3)
 >>> s1
 set([1, 2, 4])
 >>> s1.remove(3) ←登録していないものを削除するとエラーが発生!
 Traceback (most recent call last):
 File , line 0, in <stdin>##22
 File , line 0, in Remove##20
 KeyError: 3
 >>> s1.discard(4)
 >>> s1
 set([1, 2])
 >>> s1.discard(4) ←discardではエラーは発生しません。
 >>>


 S.union(S2)
 "S|S2"という演算子を使った場合と同じ。
 S.intersection(S2)
 "S&S2"という演算子を使った場合と同じ。
 S.difference(S2)
 "S-S2"という演算子を使った場合と同じ。
 S.symmetric_difference(S2)
 "S^S2"という演算子を使った場合と同じ。

 >>> s1 = set([1,2,3,4])
 >>> s2 = set([3,4,5,6])
 >>> s1.union(s2)
 set([1, 2, 3, 4, 5, 6])
 >>> s1.intersection(s2)
 set([3, 4])
 >>> s1.difference(s2)
 set([1, 2])
 >>> s1.symmetric_difference(s2)
 set([1, 2, 6, 5])
 >>>