Irohabook
0
10371

Pythonの集合(要素の存在確認、追加、削除)

リストや辞書の他に集合で要素の集まりを扱うことができます。集合は中カッコで囲います。

a = {1, 2, 3}
b = {'apple', 'melon', 'peach'}
print(a)
print(b)

出力

{1, 2, 3}
{'apple', 'melon', 'peach'}

リストと同じように、集合も追加や削除といった便利なメソッドを用意しています。

集合の順序

集合は順序がなく、上のプログラムも毎回異なる結果を出します。

{1, 2, 3}
{'melon', 'apple', 'peach'}

{1, 2, 3}
{'apple', 'peach', 'melon'}

appleやmelonの場所が変わっていることに注目してください。ただし数値のみの集合では順序が変わっていません(環境はPython3.6)。

順序を必要とする場合は集合でなくリストを使ったほうがいいでしょう。

集合に要素があるか確認する

集合に要素があるかどうかチェックするにはinを使います。

a = {'apple', 'melon', 'peach'}
if 'apple' in a:
    print('存在します')

出力

存在します

「要素 in 集合」で、要素が集合にあるときは真を返します。存在しないか確かめるときはnot inを使います。

a = {'apple', 'melon', 'peach'}
if 'apple' not in a:
    print('appleはありません')
if 'lemon' not in a:
    print('lemonはありません')

出力

lemonはありません

上のプログラムでは、集合にappleがあるため最初のifは実行されず、逆にlemonはないため次のifは実行されて「lemonはありません」と表示されます。

集合に要素を追加する

集合に要素を追加するにはaddというメソッドを使います。

a = {'apple', 'melon', 'peach'}
a.add('grape')
print(a)

出力

{'grape', 'peach', 'apple', 'melon'}

grapeが追加されています。集合の基本にあるように、要素の順番は出力するたびに変わります。

集合に集合を追加する

集合に集合を追加するにはupdateというメソッドを使います。

a = {'apple', 'melon', 'peach'}
a.update({'grape', 'lemon'})
print(a)

出力

{'lemon', 'peach', 'apple', 'grape', 'melon'}

updateでgrapeとlemonが追加されています。追加する集合に追加される集合の要素がある場合、重複した要素は追加されません。

a = {'apple', 'melon', 'peach'}
a.update({'apple', 'grape', 'lemon'})
print(a)

出力

{'lemon', 'peach', 'apple', 'grape', 'melon'}

appleが重複していないことに注目してください。次のプログラムは面白い結果になります。

a = {'apple', 'melon', 'peach'}
a.update('grape')
print(a)

出力

{'melon', 'p', 'peach', 'e', 'a', 'g', 'r', 'apple'}

updateの引数は集合でなく文字列です。grapeという言葉が一文字ずつ分解されて追加されています。

集合から要素を削除する

集合から要素を削除するにはremoveを使います。

a = {'apple', 'melon', 'peach'}
a.remove('apple')
print(a)

出力

{'melon', 'peach'}

削除しようとする要素が集合にない場合、エラーになります

a = {'apple', 'melon', 'peach'}
a.remove('lemon')
print(a)

出力

Traceback (most recent call last):
  File "set_6.py", line 2, in <module>
    a.remove('lemon')
KeyError: 'lemon'

removeを使うときは、removeしたい要素が集合に含まれるかチェックしなければいけません。含まれる場合に限りremoveします。

a = {'apple', 'melon', 'peach'}
if 'lemon' in a:
    a.remove('lemon')
print(a)

出力

{'peach', 'apple', 'melon'}

discardはremoveと同様、要素を集合から削除しますが、要素が集合にない場合もエラーを出しません。

a = {'apple', 'melon', 'peach'}
a.discard('apple')
print(a)
a.discard('lemon')
print(a)

出力

{'peach', 'melon'}
{'peach', 'melon'}
次の記事

リスト・辞書