このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Python入門】集合への要素の追加と削除

集合への要素の追加と削除
集合はミュータブルなデータ構造であり、要素の追加や削除が容易に行えます。これにより、動的に変化するデータの管理が可能となります。たとえば、色や果物、その他のアイテムを管理する際に、重複を許さず、効率的に操作できる集合の特徴を活かすことができます。ここでは、集合への要素の追加と削除について、具体例や表を用いて詳しく解説していきます。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
1.集合への要素の追加
集合に新しい要素を追加する方法には、単一の値を追加する場合と、複数の値を同時に追加する場合があります。ここでは、代表的な2つの方法について説明します。
1.1. addメソッドを使った追加
add メソッドは、集合に対して1個の要素を追加するために使います。すでに存在する要素を追加しようとしても、エラーは発生せず、集合は変化しません。以下の例では、空の集合に 'apple' を追加しています。
【構文】集合に値を追加(addメソッド)集合.add(値)
サンプルプログラム
# 空の集合を作成
fruits = set()
print("初期の集合:", fruits) # 出力例: set()
# addメソッドを使って 'apple' を追加
fruits.add('apple')
print("addメソッド実行後:", fruits) # 出力例: {'apple'}実行結果
初期の集合: set()
addメソッド実行後: {'apple'}解説
set()により空の集合が生成され、変数fruitsに代入されます。fruits.add('apple')によって、'apple' が集合に追加されます。- すでに 'apple' が存在する場合、再度追加しても集合の内容は変化しません。
1.2. 累算代入文(|=)を使った追加
複数の値を同時に追加する場合は、累算代入文を利用すると便利です。|= 演算子を使うことで、右辺に指定した集合の要素が左辺の集合に追加されます。以下の例では、'banana' と 'orange' をまとめて追加しています。
【構文】集合に値を追加(累算代入文)集合 |= {値, …}
サンプルプログラム
# 既存の集合に対して複数の値を追加する
fruits |= {'banana', 'orange'}
print("累算代入文実行後:", fruits)
# 出力例: {'orange', 'banana', 'apple'}実行結果
累算代入文実行後: {'apple', 'orange', 'banana'}解説
{'banana', 'orange'}は2つの要素からなる集合です。fruits |= {'banana', 'orange'}により、既存のfruits集合に 'banana' と 'orange' が追加されます。- 追加する値の一部が既に存在する場合は、存在しない値だけが追加され、エラーは発生しません。
2.集合からの要素の削除
集合から要素を削除する方法は複数あります。削除対象が存在しない場合の動作が異なる点に注意が必要です。
2.1. removeメソッドとdiscardメソッドの違い
remove メソッドは、指定した要素が存在しない場合に KeyError を発生させます。一方、discard メソッドは、指定した要素が存在しなくても何も行わず、エラーが発生しません。以下の例でその違いを確認します。
【構文】集合から要素を削除(removeメソッド)集合.remove(値)
【構文】集合から要素を削除(discardメソッド)集合.discard(値)
サンプルプログラム
print("現在の集合:", fruits) # 出力例: {'orange', 'banana', 'apple'}
# removeメソッドを使って 'apple' を削除
fruits.remove('apple')
print("remove実行後:", fruits) # 出力例: {'orange', 'banana'}
# discardメソッドを使って 'banana' を削除
fruits.discard('banana')
print("discard実行後:", fruits) # 出力例: {'orange'}
# 存在しない要素を削除する場合の動作
try:
fruits.remove('apple')
except KeyError as e:
print("remove実行時のエラー:", e) # 'apple' が存在しないため KeyError 発生
# discardの場合はエラーにならず、何も起きない
fruits.discard('apple')
print("discard実行後(存在しない場合):", fruits) # 出力例: {'orange'}実行結果
現在の集合: {'apple', 'orange', 'banana'}
remove実行後: {'orange', 'banana'}
discard実行後: {'orange'}
remove実行時のエラー: 'apple'
discard実行後(存在しない場合): {'orange'}解説
remove('apple')では、'apple' が集合に存在しないときにKeyErrorが発生します。discard('apple')は、指定した要素が存在しなくてもエラーを発生させず、集合はそのままになります。
2.2. 累算代入文(-=)を使った複数要素の削除
複数の要素を一度に削除する場合は、累算代入文を使うことができます。存在しない要素が含まれていた場合は、存在する要素のみが削除されます。
【構文】集合から要素を削除(累算代入文)集合 -= {値, …}
サンプルプログラム
# 現在の集合を再確認
print("現在の集合:", fruits) # 出力例: {'orange'}
# 複数の値を同時に削除('orange' は存在するが 'grape' は存在しない)
fruits -= {'orange', 'grape'}
print("累算代入文で削除後:", fruits) # 出力例: set()実行結果
現在の集合: {'orange'}
累算代入文で削除後: set()解説
fruits -= {'orange', 'grape'}によって、'orange' が削除されます。- 'grape' はもともと存在しないため、削除処理に影響を与えず、エラーも発生しません。
2.3. popメソッドとclearメソッドによる削除
pop メソッドは、集合から任意の要素を1つ削除し、その要素を返します。clear メソッドは、集合内のすべての要素を削除して空の集合にします。以下の例では、アルファベットの集合を用いてこれらのメソッドを実演します。
【構文】集合の任意の要素を削除(popメソッド)集合.pop()
【構文】集合の全ての要素を削除(clearメソッド)集合.clear()
サンプルプログラム
# アルファベットの一部を含む集合を作成
alphabet = set('abcdefg')
print("初期の集合:", alphabet)
# 出力例: {'a', 'b', 'c', 'd', 'e', 'f', 'g'} (順序は任意)
# popメソッドを使って任意の要素を削除
removed_element = alphabet.pop()
print("popで削除された要素:", removed_element)
print("pop実行後の集合:", alphabet)
# clearメソッドを使って集合を空にする
alphabet.clear()
print("clear実行後の集合:", alphabet) # 出力例: set()実行結果
初期の集合: {'b', 'c', 'g', 'd', 'e', 'f', 'a'}
popで削除された要素: b
pop実行後の集合: {'c', 'g', 'd', 'e', 'f', 'a'}
clear実行後の集合: set()解説
popメソッドは集合内の「任意の」要素を削除するため、削除される要素は実行ごとに変わる可能性があります。clearメソッドにより、集合内の全要素が一括で削除され、空の集合が得られます。
まとめ
集合はミュータブルな性質を持ち、要素の追加と削除が柔軟に行えます。
- 追加について
・addメソッドを用いて1個の値を追加でき、すでに存在する値を追加しても変化しません。
・累算代入文(|=演算子)を用いると、複数の値を一度に追加でき、存在する値は無視されます。 - 削除について
・removeメソッドは、存在しない要素を削除しようとするとKeyErrorを発生させるのに対し、discardメソッドはエラーを発生させず、何も行いません。
・累算代入文(-=演算子)を使えば、複数の要素を同時に削除できます。
・popメソッドは任意の要素を削除し、その値を返し、clearメソッドは集合内のすべての要素を削除します。
これらの機能を適切に利用することで、集合を用いた効率的なデータ管理が可能となります。
