セット | Python-izm

セット

ディクショナリの次はセットです。集合とも呼ばれます。リストと同じように要素を追加、削除することができますが、重複した要素を持つことができないのが特徴です。また本項では更新することができないsetであるfrozensetも取り扱います。
※セットのもう少し踏み込んだ使い方はセットの比較・作成・更新で触れています。

セットの基本

セットはディクショナリと同じように「 {} 」(中カッコ)を使用します。

test_set_1 = {'python', '-', 'izm', '.', 'com'}
print(test_set_1)

print('--------------------------------')

for i in test_set_1:
    print(i)
{'izm', '.', '-', 'python', 'com'}
--------------------------------
python
-
com
izm
.

要素がない空のセットを作成する時はsetを用います。

# これはディクショナリ
test_dict = {}

# これはセット
test_set = {'python'}

# 空のセットは「set」を使う
empty_set = set()

前述の通り、重複した値を持つことはできません。たとえば次の例では‘python’‘izm’が重複していますが、そのセットの出力結果には1つだけしか存在していません。

test_set_1 = {'python', '-', 'izm', '.', 'com', 'python', 'izm'}
print(test_set_1)

print('--------------------------------')

for i in test_set_1:
    print(i)
{'izm', '.', '-', 'python', 'com'}
--------------------------------
python
-
com
izm
.

要素の追加

単一の要素を追加する場合はadd、他のセットやリスト、タプルなどから要素を追加する場合はupdateを使用します。

test_set_1 = set()

test_set_1.add('python')
test_set_1.update({'-', 'izm', '.', 'com'})

print(test_set_1)
{'izm', '.', '-', 'python', 'com'}

要素の削除

セットから要素を削除する場合はremovediscardを使用します。removeは指定した要素が存在していない場合はエラーとなります。

test_set_1 = {'python', '-', 'izm', '.', 'com'}

test_set_1.remove('-')
test_set_1.discard('.')

print(test_set_1)
{'izm', 'python', 'com'}

frozenset

frozensetはfrozenset関数を使用して通常のsetのように作成できます。ただし次の例にあるようなremovediscard、さらにaddupdateなどを行おうとするとAttributeErrorが発生します。

test_set_1 = frozenset({'python', '-', 'izm', '.', 'com'})

# test_set_1.remove('-')
# test_set_1.discard('.')

print(test_set_1)
frozenset({'izm', '.', '-', 'python', 'com'})