5.7.1 Set オブジェクト

SetImmutableSetのインスタンスはともに、 以下の操作を備えています:

演算 等価な演算 結果
len(s) 集合sの濃度 (cardinality)
x in s xsに帰属していれば真を返す
x not in s xsに帰属していなければ真を返す
s.issubset(t) s <= t sのすべての要素がtに帰属していれば真を返す
s.issuperset(t) s >= t tのすべての要素がsに帰属していれば真を返す
s.union(t) s | t stの両方の要素からなる新しい集合
s.intersection(t) s & t stで共通する要素からなる新しい集合
s.difference(t) s - t sにあるがtにない要素からなる新しい集合
s.symmetric_difference(t) s ^ t stのどちらか一方に属する要素からなる集合
s.copy() sの浅いコピーからなる集合

演算子を使わない書き方である union()intersection()difference()、およびsymmetric_difference() は任意の イテレート可能オブジェクトを引数として受け取るのに対し、演算子を使った 書き方の方では引数は集合型でなければならないので注意してください。 これはエラーの元となるSet('abc') & 'cbs' のような書き方を 排除し、より可読性のあるSet('abc').intersection('cbs') を選ばせるための仕様です。 バージョン 2.3.1 で 変更 された仕様: 以前は全ての引数が集合型でなければなりませんでした。

加えて、SetImmutableSet は集合間の比較をサポートしています。 二つの集合は、各々の集合のすべての要素が他方に含まれて (各々が他方の 部分集合) いる場合、かつその場合に限り等価になります。 ある集合は、他方の集合の真の部分集合 (proper subset、部分集合で あるが非等価) である場合、かつその場合に限り、他方の集合より小さくなります。 ある集合は、他方の集合の真の上位集合 (proper superset、上位集合で あるが非等価) である場合、かつその場合に限り、他方の集合より大きくなります。

部分集合比較やと等値比較では、完全な順序決定関数を一般化できません。 たとえば、互いに素な 2 つの集合は等しくありませんし、互いの部 分集合でもないので、a<ba==ba>bすべて False を返します。 したがって集合は __cmp__ メソッドを実装しません。

集合は一部の順序(部分集合の関係)を定義するだけなので、集合のリストにおいて list.sort() メソッドの出力は未定義です。

以下はImmutableSetで利用可能であるがSetにはない操作です:

演算 結果
hash(s) s のハッシュ値を返す

以下はSetで利用可能であるがImmutableSetにはない操作です:

演算 等価な演算 結果
s.update(t) s |= t tを加えた要素からなる集合sを返します
s.intersection_update(t) s &= t tでも見つかった要素だけを持つ集合sを返します
s.difference_update(t) s -= t tにあった要素を取り除いた後の集合sを返します
s.symmetric_difference_update(t) s ^= t stのどちらか一方に属する要素からなる集合 sを返します
s.add(x) 要素xを集合sに加えます
s.remove(x) 要素xを集合sから取り除きます; x がなければ KeyError を送出します
s.discard(x) 要素xが存在すれば、集合sから取り除きます
s.pop() sから要素を取り除き、それを返します; 集合が空なら KeyError を送出します
s.clear() 集合sからすべての要素を取り除きます

演算子を使わない書き方である update()intersection_update()difference_update()、 およびsymmetric_difference_update() は任意の イテレート可能オブジェクトを引数として受け取るので注意してください。 バージョン 2.3.1 で 変更 された仕様: 以前は全ての引数が集合型でなければなりませんでした。

もう一つ注意を述べますが、このモジュールでは union_update()update() の別名として含まれています。 このメソッドは後方互換性のために残されているものです。 プログラマは組み込みの set() および frozenset() で サポートされている update() を選ぶべきです。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。