sec02 - Python setメソッド一覧|よく使う機能をまとめて解説

このレクチャーでは、Pythonのset型のメソッドの中で、よく使われるものを5つ紹介します。

スポンサーリンク

setの編集・メソッドに関する概要

setは並び順を保持しないため、listのように要素番号を指定して値を変更することはできません。また、list.index()のような、要素番号を参照するメソッドもありません。

setができるのは、次のような操作になります。

  • 要素番号の指定を伴わない要素の追加... add(), update()
  • 値を指定した、要素の除外... remove(), discard()
  • 順序不定の、要素の除外... pop()
  • 和集合・積集合・差集合・対称差 (| & - ^)

add()メソッドの使い方と注意点

add()は要素を1つ加えます。

s = {1, 2}
s.add(3)  # 要素を1つ追加
print(s)  # {1, 2, 3}

下記コードのようにtupleを加えることもできますが、単純に3つ目の要素として加わることになります。

次に学習するupdate()メソッドと異なり、tupleの要素が展開されて追加されるわけではありません。

s = {1, 2}
s.add((3, 4))  # tupleの追加
print(s)       # {1, 2, (3, 4)}
スポンサーリンク

update()メソッドで複数要素を追加する方法

update()はイテラブルなデータ(list, tuple, setなどのような、繰り返し可能なデータ型)を引数として渡します。引数に渡されたデータの要素は展開され、setに追加されます。

s = {1, 2}
s.update([3, 4, 5])  # list
print(s)             # {1, 2, 3, 4, 5}

s = {1, 2}
s.update((3, 4, 5))  # tuple
print(s)             # {1, 2, 3, 4, 5}

s = {1, 2}
s.update({3, 4, 5})  # set
print(s)             # {1, 2, 3, 4, 5}

remove()とdiscard()の違いと使い分け

remove()discard()はどちらも、値を指定して要素を取り除くメソッドになります。

remove()は指定した要素が存在しない時にKeyErrorを発しますが、discard()はエラーになりません。

エラーを検知したい場合はremove()を使い、指定した要素が実際に削除されたかどうかが重要でない場面ではdiscard()を使うと良いでしょう。

s = {1, 2}
s.remove(2)  # 要素を削除(存在しないと KeyError)
print(s)

s = {1, 2}
s.discard(2)  # 要素を削除(存在しなくてもエラーにならない)
print(s)

pop()メソッドで要素を取り出す方法

pop()は、順序不定で要素を1つ取り出して削除し、削除した値を返します。

setは順番を保持しないため、順番は環境によって異なります。ですので、テスト環境で取り出された順番と、本番環境で取り出される順番が異なる可能性があることを前提にコードを書く必要があります。

s = {1, 2}
result = s.pop()  # 要素を1つ取り出して削除(順序は不定)
print(s)       # {2}
print(result)  # 1
スポンサーリンク