5.7 sets -- ユニークな要素の順序なしコレクション

バージョン 2.3 で 新たに追加 された仕様です。

setsモジュールは、ユニークな要素の順序なしコレクションを構築し、 操作するためのクラスを提供します。 帰属関係のテストやシーケンスから重複を取り除いたり、 積集合・和集合・差集合・対称差集合のような標準的な数学操作などを含みます。

他のコレクションのように、x in set, len(set), for x in setをサポートします。 順序なしコレクションは、挿入の順序や要素位置を記録しません。 従って、インデックス・スライス・他のシーケンス的な振舞いをサポートしません。

ほとんどの集合のアプリケーションは、__hash__()を除いて すべての集合のメソッドを提供するSetクラスを使用します。 ハッシュを要求する高度なアプリケーションについては、 ImmutableSetクラスが__hash__()メソッドを加えているが、 集合の内容を変更するメソッドは省略されます。 SetImmutableSetは、 何が集合(isinstance(obj, BaseSet))であるか決めるのに役立つ 抽象クラスBaseSetから派生します。

集合クラスは辞書を使用して実装されます。 このことから、集合の要素にするには辞書のキーと同様の要件を満たさなけれ ばなりません。具体的には、要素になるものには __eq____hash__ が定義されているという条件です。 その結果、集合はリストや辞書のような変更可能な要素を含むことができません。 しかしそれらは、タプルやImmutableSetのインスタンスのような 不変コレクションを含むことができます。 集合の集合の実装中の便宜については、内部集合が自動的に変更不可能な形式に 変換されます。 例えば、Set([Set(['dog'])])Set([ImmutableSet(['dog'])])へ 変換されます。

クラス Set( [iterable])
新しい空のSetオブジェクトを構築します。 もしオプションiterableが与えられたら、イタレータから得られた 要素を備えた集合として更新します。 iterable中の全ての要素は、変更不可能であるか、 または5.7.3で記述されたプロトコルを使って 変更不可能なものに変換可能であるべきです。

クラス ImmutableSet( [iterable])
新しい空のImmutableSetオブジェクトを構築します。 もしオプションiterableが与えられたら、イタレータから得られた 要素を備えた集合として更新します。 iterable中の全ての要素は、変更不可能であるか、 または5.7.3で記述されたプロトコルを使って 変更不可能なものに変換可能であるべきです。

ImmutableSetオブジェクトは__hash__()メソッドを備えているので、 集合要素または辞書キーとして使用することができます。 ImmutableSetオブジェクトは要素を加えたり取り除いたりするメソッドを 持っていません。したがって、コンストラクタが呼ばれたとき要素はすべて 知られていなければなりません。



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