このページで解説している内容は、以下の 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 メソッドは集合内のすべての要素を削除します。

これらの機能を適切に利用することで、集合を用いた効率的なデータ管理が可能となります。