format_list_bulleted
【Python】集合(set)の使い方(Python3)
最終更新日時:2020-05-03 12:57:28



Python(Python3)で多数の値をまとめて使いたいときや他言語における配列のようなものを使いたいときがあると思います。そのような場合にPythonでは複数のデータの集合(set)を使うことが出来ます。setはインデックス番号やkeyを持ちません。重複するデータを持たず順序を持たない複数の要素を扱う際にsetは非常に有効です。リスト(list)とタプル(tuple)、辞書(dict)と今回紹介する集合(set)の違いについては「Pythonのデータ構造(list・tuple・dict・set)まとめ(Python3)」を参考にしてください。 

setの宣言

dictは次のように宣言できます。

集合名={要素,要素,...}
集合名=set()

実際にデータを代入するときは次のように記述します。

set1={'apple','banana','lemon'}
set2={}
set3=set()
print(type(set1))
print(type(set2))
print(type(set3))

実行結果

<class 'set'>
<class 'dict'>
<class 'set'>

空のセットを宣言するときはsetを使用します。「{}」と初期化すると空の辞書が宣言されます。

要素が存在するか検索

要素が存在するかどうかはin演算子を用いることで取得できます。

要素名 in set

実際は次のように記述します。

set1={'apple','banana','lemon'}
print('apple' in set1)
print('raspberry' in set1)

実行結果

True
False

存在する場合はTrueを、存在しない場合はFalseを返します。

setの要素数を取得

setの長さは他のデータ構造同様にlenを用いて取得できます。

set1={'apple','banana','lemon'}
print(len(set1))

実行結果

3

setの要素の追加

setに要素を追加したいときはaddメソッドを使います。

set.add(追加したい要素)

とすればOKです。同じ要素がset内に既にある場合は追加されません。

set1={'apple','banana','lemon'}
print(set1)
set1.add('raspberry')
print(set1)
set1.add('apple')
print(set1)

実行結果

{'apple', 'banana', 'lemon'}
{'apple', 'banana', 'raspberry', 'lemon'}
{'apple', 'banana', 'raspberry', 'lemon'}

最初にaddしたときはsetに無い要素のため追加されます。二回目のaddでは既にある要素を追加しようとしたため、無視されています。

setの要素の削除

setから要素を削除するときは3種類の方法が考えられます。discardメソッドremoveメソッド、popメソッドです。ただ単純に値を削除したいときはdiscardメソッドやremoveメソッド、削除する値を使用するときはpopメソッドを使用します。また、setの要素を全て削除し、空のsetにするときはclearメソッドを使用します。

discardメソッド

discardメソッドはsetの削除したい要素を指定することで特定の要素を削除出来ます。

set1={'apple','banana','lemon'}
print(set1)
set1.discard('apple')
print(set1)
set1.discard('raspberry')
print(set1)

実行結果

{'apple', 'lemon', 'banana'}
{'lemon', 'banana'}
{'lemon', 'banana'}

出力の一行目について、set1のにappleという要素が消去されているのが分かると思います。指定された要素がない場合は何もされません。

removeメソッド

removeメソッドは指定した要素がそのsetにない場合はエラーとなります。

set1={'apple','banana','lemon'}
print(set1)
set1.remove('apple')
print(set1)
set1.remove('raspberry')
print(set1)

実行結果

{'lemon', 'banana', 'apple'}
{'lemon', 'banana'}
KeyError: 'raspberry'

setに指定した要素が存在しない場合はエラーとなってしまいます。

popメソッド

popメソッドはsetの要素の消去を行うとともに、消去した要素を返り値として返します。popメソッドは引数として要素を指定することが出来ません。setの中のランダムな要素を削除して、その要素を返します。

set1={'apple','banana','lemon'}
print(set1)
setstr=set1.pop()
print(set1)
print(setstr)

実行結果

{'banana', 'apple', 'lemon'}
{'apple', 'lemon'}
banana

一回目のpopでランダムな要素を削除しnamestrに代入します。namestrには’banana’が代入されます。どの要素が返されるかはランダムなので、複数回実行すると別の値が返されます。

clearメソッド

clearメソッドはそのdictの要素を全て削除し空のdictにします。

set1={'apple','banana','lemon'}
print(set1)
set1.clear()
print(set1)

実行結果

{'apple', 'banana', 'lemon'}
set()

clearメソッドを使用した後でsetが空になっていることが分かります。

dictの結合

listの結合は「+」で行えましたが、setで行うとエラーになります。setの結合はupdateメソッドを使用します。

set1={'apple','banana','lemon'}
set2={'raspberry','strawberry'}
print(set1)
set1.update(set2)
print(set1)

実行結果

{'banana', 'apple', 'lemon'}
{'strawberry', 'raspberry', 'lemon', 'banana', 'apple'}

set1に新しいsetであるset2が結合されています。

この記事のまとめ

今回はPythonのsetで順番を持たない複数の要素を管理する方法を解説しました。最後に記事の要点をまとめます。

  • setの要素の存在はin演算子で判定
  • setの要素数はlenの要素の削除はdiscardまたはremoveメソッド,popメソッド
  • set自体の削除はclearメソッド
  • setの結合はupdateメソッド

pythonでsetを活用してみましょう!