【Python入門】集合(Set)を使う方法まとめ!

Python Python

Pythonの集合について書いています。
集合について解説した後に、下記のことを試しています。

・集合の値を参照(forループ/inで含まれるか確認)
・集合の要素を追加する
・集合の要素を削除する
・集合を結合する(和集合・積集合・差集合)

公式サイトのこちらに集合についての情報が書いています。
載せているコードはPythonのバージョン3.11.0で動作を確認しています。

Pythonの集合とは?

Pythonの集合は重複がなく、順序も決まっていない値の集まりです。
順序がないため、集合で作った変数には要素番号でアクセスすることはできません。

集合を作るには下記のようにします。

fruits = {'apple', 'banana', 'orange'}

波括弧({})の中にカンマ(,)で値を並べます。
こうすると、3つの要素を持った集合になります。

重複する値を定義することはできないので、同じ値を入れると下記のようにまとめられます。

fruits = {'apple', 'banana', 'orange', 'apple', 'banana', 'apple'}

print(fruits) # {'banana', 'apple', 'orange'}

集合の値を参照する

集合の値をfor文で全部を参照する方法と、in句で含まれているか確認する方法についてです。

for文でループする

集合に要素番号(キー)でアクセスすることはできません。
for文でループして、要素を取得することは可能です。

fruits = {'apple', 'banana', 'orange', 'grape'}

for fruit in fruits:
    print(fruit)

fruits変数に4つの要素を入れた集合を作りました。
次の処理で、for文を使ってループしています。

fruit変数に集合の値がループするたびに設定されます。
このプログラムの実行結果は下記のようになります。

banana
apple
grape
orange

集合は順序がないため、実行すると出力される順番が変わります。

inで含まれているか確認する

inを使うことで、集合に値が含まれているか確認できます。

fruits = {'apple', 'banana', 'orange'}

if 'orange' in fruits:
    print('orangeが含まれる')

最初にfruits変数に3つの要素で集合を作っています。
次の処理で、if文の判定箇所にinを使用しました。

fruits変数に’orange’がないか確認しています。
今回は含まれるので、Trueが返ってきます。

結果として「orangeが含まれる」を出力して処理が終わります。
このようにinを使うことで、含まれているか確認することができます。
含まれていればTrue、含まれていない場合にはFalseが返ってきます。

集合に要素を追加する

集合に値を追加する方法です。

値をaddで追加する

値をaddメソッドを使うことで、集合に追加できます。

fruits = {'apple', 'banana', 'orange'}
fruits.add('peach')
fruits.add('grape')

print(fruits) # {'grape', 'banana', 'orange', 'peach', 'apple'}

最初に3つの要素で、fruits変数に集合を作りました。
次の処理で、addメソッドを使って値を追加しています。

今回は’peach’と’grape’を追加しました。
print関数で出力すると、追加できたことが確認できます。
集合は順序が決まっていないため、出力結果は毎回変わります。

updateで集合を追加する

updateメソッドを使うと、作成した集合に他の集合を追加することができます。

fruits1 = {'apple', 'banana'}
fruits2 = {'orange', 'grape'}

fruits1.update(fruits2)
print(fruits1) # {'grape', 'orange', 'apple', 'banana'}

最初にfruits1変数とfruits2変数の2つの集合を作っています。
次の処理で、fruits1からupdateメソッドを呼び出して、fruits2を追加するようにしました。

こうすることで、fruits1の集合に対して、fruits2の集合の要素が追加されます。
print関数で出力すると、fruits1に値が追加されたことが確認できました。

updateメソッドはイテラブルなオブジェクトなら渡せます。
そのため、下記のようにリストから追加することもできます。

fruits1 = {'apple', 'banana'}
fruitsList = ['orange', 'grape']

fruits1.update(fruitsList)

集合の値を削除する

集合の値を削除する方法です。

removeで削除する

removeメソッドを使うことで、集合から値を削除することができます。

fruits = {'apple', 'banana', 'orange'}
fruits.remove('banana')

print(fruits) # {'apple', 'orange'}

fruits変数に3つの要素で集合を作りました。
次の処理でremoveメソッドを使って要素を削除しています。

removeメソッドには削除する要素を渡しています。
今回は’banana’を削除します。
print関数で出力すると、削除されたことが確認できました。

値が存在しないとエラーになる

removeメソッドは削除する予定の値がない場合にはエラーになります。
例えば、下記のように集合に存在しない値を渡した時です。

fruits = {'apple', 'banana', 'orange'}
fruits.remove('banana123')

この場合には、下記のようにKeyErrorが発生します。

KeyError: 'banana123'

値がない場合は無視したいときには、次のdiscardメソッドを使いましょう。

discardで削除する

discardメソッドでも、集合の値を削除することができます。
removeメソッドとの違いは、値が存在しなくてもエラーにならないところです。

fruits = {'apple', 'banana', 'orange'}
fruits.discard('banana123')
fruits.discard('banana')

print(fruits) # {'apple', 'orange'}

最初にfruits変数に3つの要素で集合を作りました。

次の処理で、discardメソッドを使って、集合から値を削除しようとしています。
banana123は存在しないので削除されず、discardではエラーになりません。

その次にbananaを削除しています、存在するため削除されます。
結果を確認すると「{'apple', 'orange'}」が出力されました。
削除されたことが確認できました。

clearで空にする

全ての値を削除するときには、clearメソッドを使います。

fruits = {'apple', 'banana', 'orange'}
fruits.clear()

print(fruits) # set()

fruits変数に3つの要素で集合を作っています。
次の処理で、clearメソッドを使って削除しました。

print関数で出力すると、要素がなくなって、空になっていることが確認できました。

集合を結合する

集合を結合して、和集合・積集合・差集合を求める方法です。

和集合

和集合を求めるには「|」またはunionメソッドを使います。

fruits1 = {'orange', 'banana', 'apple'}
fruits2 = {'banana', 'peach', 'lemon'}

fruits = fruits1 | fruits2
print(fruits) # {'lemon', 'banana', 'peach', 'orange', 'apple'}

fruits1変数とfruits2変数に集合を作りました。
次の処理で「|」を使って、和集合を求めて、結果をfruits変数に代入しています。
print関数で出力すると、和集合になっていることが確認できました。

下記のようにunionメソッドを使っても、同じように和集合を求めることができます。

fruits = fruits1.union(fruits2)

積集合

積集合を求めるには「&」またはintersectionメソッドを使います。

fruits1 = {'orange', 'banana', 'apple'}
fruits2 = {'banana', 'peach', 'lemon'}

fruits = fruits1 & fruits2
print(fruits) # {'banana'}

fruits1変数とfruits2変数に集合を作りました。
次の処理で「&」を使って、積集合を求めて、結果をfruits変数に代入しています。
print関数で出力すると、「banana」だけになって、積集合になっていることが確認できました。

下記のようにintersectionメソッドを使っても、同じように積集合を求めることができます。

fruits = fruits1.intersection(fruits2)

差集合

差集合を求めるには「-」またはdifferenceメソッドを使います。

fruits1 = {'orange', 'banana', 'apple'}
fruits2 = {'banana', 'peach', 'lemon'}

fruits = fruits1 - fruits2
print(fruits) # {'apple', 'orange'}

fruits1変数とfruits2変数に集合を作りました。
次の処理で「-」を使って、差集合を求めて、結果をfruits変数に代入しています。

print関数で結果を出力すると「{'apple', 'orange'}」となりました。
fruits1から、fruits2と同じ要素の「banana」がなくなって、差集合が求められたことが確認できます。

下記のようにdifferenceメソッドを使っても、同じように差集合を求めることができます。

fruits = fruits1.difference(fruits2)

コメント

タイトルとURLをコピーしました