まくまくPythonノート
Python の set オブジェクトの基本
2014-04-21

set オブジェクトは、ユニークな要素(重複しない要素)のみを保持するコレクションの一種です。

set オブジェクトを生成する

set オブジェクトは下記のように、いろいろな方法で作成することができます。

s = set()           # 空のセットを生成
s = {1, 2, 3}       # リテラルからセットを生成
s = set([1, 2, 3])  # リストからセットを生成
s = set((1, 2, 3))  # タプルからセットを生成
s = set('abc')      # 文字列からセットを生成 => {'a', 'b', 'c'}
s = set({'a':1, 'b':2})  # ディクショナリのキーからセットを生成 => {'a', 'b'}

set リテラルを表現するときの記号には、dictionary と同様に {} を使用します。 空の set リテラルを定義しようとして {} と記述してしまうと、空の dictionary とみなされてしまうので、set() コンストラクタを使用しなければいけないことに注意してください。

set オブジェクトに要素を追加する

set.add() メソッドで、set に要素を追加することができます。 すでに存在する要素を追加しようとした場合は、何も起こりません。

s = {1, 2, 3}
s.add(3)
s.add(4)
s.add(5)
print(s)  #=> {1, 2, 3, 4, 5}

set オブジェクトから要素を削除する

set.remove() メソッドで、指定した要素を set オブジェクトから削除することができます。

s = {1, 2, 3}
s.remove(2)
print(s)  #=> {1, 3}

ただし、set.remove() メソッドは、存在しない要素を削除しようとすると KeyError が発生する ことに注意してください。

s = {1, 2, 3}
s.remove(4)    # KeyError
s.discard(4)   # OK(何も起こらない)

指定した要素が set 内に存在するか調べる

list や tuple と同様に、set が指定した要素を保持しているかどうかを調べるには、in キーワードを使用します。

s = {'aaa', 'bbb', 'ccc'}
if 'bbb' in s:
    print('OK')

set の内容を列挙する

list や tuple と同様に、set が保持する要素は for-in によってループ処理することができます。

s = {30, 10, 20}
for x in s:
    print(x)

ソートして取り出したい場合は、一度 sorted() 関数に渡してソートされた list に変換してからループ処理します。

s = {30, 10, 20}
for x in sorted(s):
    print(x)
2014-04-21