このページで解説している内容は、以下の 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
メソッドは集合内のすべての要素を削除します。
これらの機能を適切に利用することで、集合を用いた効率的なデータ管理が可能となります。