競技プログラミングをやっていて、ふと「どちらも削除するものだけど、この2つの違いってなんだ?」と思い調べてみました。結論としては、取り除くものがそもそも存在しないときエラーを返すかどうかです。
removeとdiscardの共通事項
- 集合から要素を削除するメソッド。
- 複数指定はできない。
- 要素を指定しない場合、エラーが出る。
removeとdiscardの違い
S = {one, two, three}
S.remove()
#エラー:remove() takes exactly one argument (0 given)
S.discard()
#エラー:discard() takes exactly one argument (0 given)
S.remove('four')
#KeyError: 'four'
S.discard('four')
#エラーは出ない
先述の通り、要素を指定しなければどちらもエラーを出しますが、要素を指定して、それが含まれていない場合、remove
はエラーを吐き出し、discard
は吐き出しません。2つの違いはここにあります。
覚え方
違いはわかってもいつも忘れるので、英語から理解して覚えようと思います。
remove
は、『ある場所から移動させるだけで、ものはまだある』、discard
は、『取り除き、廃棄してしまう』 というニュアンスがあります。なので、まだ存在しているニュアンスの強いremove
は、要素にないものを指定すると「そもそもそんなのないから移動させられないよ!」みたいにエラーを出すのかなと覚えました。