[解決!Python]集合の要素を追加したり削除したりするには解決!Python

集合に要素を追加したり、集合から要素を削除したりするのに使えるメソッドと演算子を紹介する。

» 2023年04月25日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

s = {0, 1, 2}
print(s)  # {0, 1, 2}

# 集合に要素を追加
s.add(3)
print(s)  # {0, 1, 2, 3}

# addメソッドで追加できる要素は一度に1つで、ハッシュ可能なオブジェクトは渡せない
s.add(4, 5# TypeError
s.add([4, 5])  # TypeError

# 複数の要素を集合に加えるにはupdateメソッドか|演算子か|=演算子を使う
s.update({4, 5})
print(s)  # {0, 1, 2, 3, 4, 5}

s.update([6, 7])  # 集合以外の反復可能オブジェクトでもよい
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7}

s2 = s | {8, 9# |演算子は新しい集合オブジェクトを作成する
print(s2)  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7}

s2 = s | [8, 9# TypeError

s |= {8, 9# |=演算子は集合オブジェクト自身を変更する
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

# 集合から要素を削除
s.remove(9)
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7, 8}

s.remove(10# KeyError

s.discard(8)
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7}

s.discard(10# 例外は発生しない
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7}

# 任意の要素を取り出して戻り値とし、その要素を集合から削除
x = s.pop()
print(f'popped {x}, s: {s}'# popped 0, s: {1, 2, 3, 4, 5, 6, 7}

# 複数の要素を集合から削除するには
s = {0, 1, 2, 3, 4, 5, 6}

s.difference_update({5, 6})
print(s)  # {0, 1, 2, 3, 4}

s.difference_update((3, 4))
print(s)  # {0, 1, 2}

# -演算子は新しい集合オブジェクトを作成する
s2 = s - {1, 2}
print(s2)  # {0}
print(s)  # {0, 1, 2}

# -=演算子は集合オブジェクト自身を変更する
s -= {1, 2}
print(s)  # {0}

s -= [0, 1# TypeError

# 集合から全ての要素を削除
s.clear()
print(s)  # set()


集合の要素を追加したり削除したりする方法

 集合に要素を追加するには以下のような方法がある。

メソッド/演算子 説明
addメソッド 要素を1つ追加
updateメソッド 要素を1つ以上追加
|演算子 要素を1つ以上追加。新たな集合を作成
|=演算子 要素を1つ以上追加。集合自身を更新
集合に要素を追加するのに使えるメソッド/演算子

 集合から要素を削除するには以下のような方法がある。

メソッド/演算子 説明
removeメソッド 要素を1つ削除。指定した要素がないと例外が発生
discardメソッド 要素を1つ削除。指定した要素がなくても例外が発生しない
popメソッド 集合から任意の要素を削除し、それを戻り値とする
difference_updateメソッド 要素を1つ以上削除
-演算子 要素を1つ以上削除。新たな集合を作成
-=演算子 要素を1つ以上削除。集合自身を更新
clearメソッド 全ての要素を削除する
集合から要素を削除するのに使えるメソッド/演算子

 以下ではこれらを順に説明する。

要素の追加

 集合に要素を1つだけ追加するにはaddメソッドを使用する。以下に例を示す。

s = {0, 1, 2}
print(s)  # {0, 1, 2}

# 集合に要素を追加
s.add(3)
print(s)  # {0, 1, 2, 3}


 この例では集合sは{0, 1, 2}という3つの要素を持つように初期化されている。その集合に対して、「s.add(3)」を実行することで集合に新たな要素が追加されている。

 addメソッドは引数を1つだけ受け取り、それを集合の要素として追加する。引数の値がすでに集合の要素として格納されていれば、その集合の要素に変化はない。また、集合の要素として格納できるものでなければTypeError例外が発生する。

s.add(4, 5# TypeError
s.add([4, 5])  # TypeError


 上の1つ目の例では複数の引数を渡していることでTypeError例外が発生している。2つ目の例では、リストを集合の要素として追加しようとしているが、リストは集合の要素にはできないのでTypeError例外が発生する。

 複数の要素をまとめて集合に追加したいときにはupdateメソッドか|演算子か|=演算子を使用する。

 以下はupdateメソッドの呼び出し例だ。

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


 この例では先ほどの例でも使用した集合sに対し、引数に{4, 5}という集合を指定してupdateメソッドを呼び出している。その結果、集合sには2つの要素が追加されている。引数に指定した値の中で、既に集合の要素となっているものについては重複することはない。

 なお、updateメソッドには集合以外の反復可能オブジェクトを渡してもよい。以下はその例だ。

s.update([6, 7])  # 集合以外の反復可能オブジェクトでもよい
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7}


 この例では、[6, 7]というリストを渡しているが、2つの整数値が集合に加えられているのが分かるはずだ。

 集合と集合を足し合わせて、それらの和集合を作成するには|演算子を使える。|演算子は2つの集合の和集合となる集合オブジェクトを新しく作成する。

result = {0, 1, 2} | {2, 3, 4}
print(result)  # {0, 1, 2, 3, 4}


 これを使って、集合に新たな要素を追加できる。以下に例を示す。

s2 = s | {8, 9# |演算子は新しい集合オブジェクトを作成する
print(s2)  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7}


 このコード例では、「s | {8, 9}」と|演算子を使って、集合sと{8, 9}という集合の和集合を作成し、その結果を変数s2に代入している。そのため、集合s2の内容は上の式で得られる和集合となり、集合sの内容は以前とは変わらない。

 updateメソッドとは異なり、リストなどの反復可能オブジェクトをオペランドとして置くことはできないことには注意(次に説明する|=演算子でもリストなど、集合以外の反復可能オブジェクトをオペランドとすることはできない)。

s2 = s | [8, 9# TypeError


 |演算子ではなく、|=演算子も同様だが、こちらは代入先の集合オブジェクト自身の内容が変化する(更新される)ことが異なる。以下に例を示す。

s |= {8, 9# |=演算子は集合オブジェクト自身を変更する
print(s)  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}


要素の削除

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。