Python3 集合

集合(set)は順序を持たない重複のない要素の集まりです。

集合の要素は重複せず、共通部分(交差)、和集合、差集合などの一般的な集合演算を行うことができます。

中括弧を使用できます{ }集合を作成し、要素間はカンマで,区切り、またはset()関数を使用して集合を作成することもできます。

作成形式:

parame = {value01,value02,...}
或者
set(value)

以下は簡単な例です:

set1 = {1, 2, 3, 4}            # 直接使用大括号创建集合
set2 = set([4, 5, 6, 7])      # 使用 set() 函数从列表创建集合

注意:空の集合を作成するには必ず set()ではなく{ }、なぜなら{ }空の辞書を作成するために使われるからです。

さらに例のデモ:

例(Python 3.0+)

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # ここでは重複除去機能を示しています
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 要素が集合内にあるかを素早く判定します
True
>>> 'crabgrass' in basket
False

>>> # 以下は2つの集合間の演算を示しています。
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合aには含まれるが集合bには含まれない要素
{'r', 'd', 'b'}
>>> a | b                              # 集合aまたはbに含まれるすべての要素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合aとbの両方に含まれる要素
{'a', 'c'}
>>> a ^ b                              # aとbに同時に含まれない要素
{'r', 'd', 'b', 'm', 'z', 'l'}

リスト内包表記と同様に、集合も集合内包表記(Set comprehension)をサポートしています:

例(Python 3.0+)

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

集合の基本操作

1、要素の追加

構文は次のとおりです:

s.add( x )

要素 x を集合 s に追加します。要素がすでに存在する場合は何も操作しません。

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{'Taobao', 'Facebook', 'Google', 'サンプル'}

もう1つの方法でも要素を追加できます。引数にはリスト、タプル、辞書などを指定できます。構文は次のとおりです:

s.update( x )

x は複数指定でき、カンマで区切ります。

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> thisset.update({1,3})
>>> print(thisset)
{1, 3, 'Google', 'Taobao', 'サンプル'}
>>> thisset.update([1,4],[5,6])  
>>> print(thisset)
{1, 3, 4, 5, 6, 'Google', 'Taobao', 'サンプル'}
>>>

2、要素の削除

構文は次のとおりです:

s.remove( x )

要素 x を集合 s から削除します。要素が存在しない場合はエラーが発生します。

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Google', 'サンプル'}
>>> thisset.remove("Facebook")   # 存在しない場合はエラーが発生
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Facebook'
>>>

他にも集合の要素を削除する方法があります。要素が存在しなくてもエラーは発生しません。構文は次のとおりです:

s.discard( x )

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> thisset.discard("Facebook")  # 存在しなくてもエラーは発生しない
>>> print(thisset)
{'Taobao', 'Google', 'サンプル'}

集合内の要素をランダムに削除するように設定することもできます。構文は次のとおりです:

s.pop() 

スクリプトモードの例(Python 3.0+)

thisset = set(("Google", "サンプル", "Taobao", "Facebook"))
x = thisset.pop()

print(x)

出力結果:

サンプル

複数回実行すると、テスト結果は毎回異なります。

set 集合の pop メソッドは、集合を順不同に並べ、その順不同に並んだ集合の左端の最初の要素を削除します。

3、集合の要素数を計算する

構文は次のとおりです:

len(s)

集合 s の要素数を計算します。

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> len(thisset)
3

4、集合を空にする

構文は次のとおりです:

s.clear()

集合 s を空にします。

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()

5、要素が集合内に存在するかを判定する

構文は次のとおりです:

x in s

要素 x が集合 s 内に存在するかを判定します。存在すれば True を返し、存在しなければ False を返します。

例(Python 3.0+)

>>> thisset = set(("Google", "サンプル", "Taobao"))
>>> "サンプル" in thisset
True
>>> "Facebook" in thisset
False
>>>

集合の組み込みメソッド完全リスト

メソッド 説明
add()add() 集合に要素を追加する
clear()clear() 集合内のすべての要素を削除する
copy()copy() 集合をコピーする
difference()difference() 複数の集合の差集合を返す
difference_update()difference_update() 指定された集合にも存在する要素を、集合から削除する。
discard()discard() 集合内の指定された要素を削除する
intersection()intersection() 集合の共通部分を返す
intersection_update()intersection_update() 集合の共通部分を返す。
isdisjoint()isdisjoint() 2つの集合が同じ要素を含むかどうかを判定する。含まない場合は True を返し、含む場合は False を返す。
issubset()issubset() 指定された集合が、このメソッドの引数の集合の部分集合であるかを判定する。
issuperset()issuperset() このメソッドの引数の集合が、指定された集合の部分集合であるかを判定する
pop()pop() 要素をランダムに削除する
remove()remove() 指定された要素を削除する
symmetric_difference()symmetric_difference() 2つの集合のうち重複しない要素の集合を返す。
symmetric_difference_update()symmetric_difference_update() 現在の集合から、もう1つの指定された集合と同じ要素を削除し、もう1つの指定された集合の異なる要素を現在の集合に挿入する。
union()union() 2つの集合の和集合を返す
update()update() 集合に要素を追加する
len()len() 集合の要素数を計算する
その他の拡張