【Python】set(セット)とはなんぞや?【セットの使い方と集合演算】

Python

この記事では、Pythonの配列の一種であるsetについて解説します。

set(セット)とは?

セットとは、重複する要素を持てない配列です。重複する要素が格納されると、その要素が片方削除されます。また、セットは集合とも呼ばれ、集合演算に用いられます。

また、重複する要素を持てない性質を利用して、リストやタプルなどをセットに一時的に変換することで、重複する要素をまとめて取り除くこともできます。

更新できないsetであるfrozensetもあります。

【Python】frozensetとはなんぞや?【イミュータブルなセットの使い方】【Python】frozensetとはなんぞや?【イミュータブルなセットの使い方】

セットの特徴
  • 可変(ミュータブル)
  • 重複する要素を持てない
  • 並びを保持しない
  • 集合演算ができる

それではセットの使い方を見ていきましょう!

セットの基本的な使い方

宣言

空のセットを宣言するには以下のように記述します。

変数名 = set()

初期化

セットを初期化するには{}内に要素を,(カンマ)区切りで指定します。

変数名 = {要素1, 要素2, ..., 要素N}

呼び出し

セットはインデックスでアクセスすることができません。なのでリストに変換するかfor文で要素を取り出しましょう。

# セット初期化
s = {1, 2, 3}

# リストに型変換する
s_list = list(s)
print(s_list[0])

# for文を使う
for val in s:
    print(val)

要素の追加

セットで要素を追加するには、以下のような方法があります。

任意の要素の追加 [add]

addメソッドを使って任意の要素を追加できます。

書き方

以下のように記述します。

セット.add(追加する要素)

サンプル

セットに要素を追加して出力してみます。

vals = {1, 2, 3}

# 4を追加
vals.add(4)
print(vals)

# 重複している要素を追加してみる
vals.add(1)
print(vals)

実行結果

{1, 2, 3, 4}
{1, 2, 3, 4}

複数の要素の追加 [update]

updateメソッドを使って複数の要素を追加できます。引数に配列を渡すことで、その配列の要素を追加することができます。

書き方

以下のように記述します。

セット.update(追加したい配列)

サンプル

試しに複数の要素を追加してみます。

vals = {1, 2, 3}
vals.update([1, 4])

print(vals)

実行結果

{1, 2, 3, 4}

要素の削除

セットの要素を削除する方法を紹介します。

任意の要素の削除[remove] [discard]

removeメソッド、またはdiscardメソッドを使うことで任意の要素を削除できます。discardメソッドは、指定した要素がセット内に存在しなくてもエラーになりません。

書き方

以下のように記述します。

セット.remove(削除したい要素)

セット.discard(削除したい要素)

サンプル

試しに要素を削除してみます。その中でdiscardメソッドの引数に存在しない要素を指定してもエラーが起きないか試してみます。

vals = {1, 2, 3}

# 2を削除
vals.remove(2)

# 存在しない要素を指定
vals.discard(5)

print(vals)

実行結果

{1, 3}

先頭の要素を取り出す[pop]

popメソッドを使うことで先頭の要素を取り出せます。どの要素を取り出すかは指定できないので注意してください。

書き方

以下のように記述します。

セット.pop()

サンプル

試しにpopメソッドを使って要素を取り出してみます。

vals = {1, 2, 3}

val = vals.pop()
print(value)

val = vals.pop()
print(value)

val = vals.pop()
print(value)

print(values)

実行結果

1
2
3
set()

全ての要素を削除する[clear]

clearメソッドを使うことで全ての要素を削除できます。

書き方

以下のように記述します。

セット.clear()

サンプル

試しに全ての要素を削除してみます。

vals = {1, 2, 3}
vals.clear()

print(vals)

実行結果

set()

長さの取得[len]

len関数を使うことで長さを取得できます。

使い方

以下のように記述します。

len(セット)

サンプル

セットの長さを出力してみます。

vals = {1, 2, 3}

print(len(vals))

実行結果

3

集合演算

setで集合演算する方法を紹介します。

和集合[union][|]

unionメソッドまたは演算子を使って和集合を計算できます。

和集合とは「どちらか片方には存在する要素」を集めます。
図では以下のようになります。

和集合 ベン図

書き方

以下のように記述します。

セット.union(配列)

セット1 | セット2

サンプル

試しに和集合をしてみましょう。

vals1 = {1, 2}
vals2 = {3, 4}

union = vals1.union(vals2)
print(union)

union = vals1 | vals2
print(union)

実行結果

{1, 2, 3, 4}
{1, 2, 3, 4}

unionメソッドには複数の配列を指定可能で、リスト・タプルも指定できます。

vals1 = {1, 2}
vals2 = {3, 4}

union = vals1.union(vals2, [5, 6], (7, 8))
print(union)

実行結果

{1, 2, 3, 4, 5, 6, 7, 8}

積集合[intersection][&]

intersectionメソッド、または&演算子を使って積集合を計算できます。

積集合とは「両方に入っている要素」を集めます。
図では以下のようになります。

差集合 ベン図

書き方

以下のように記述します。

セット.intersection(配列)

セット1 & セット2

サンプル

試しに積集合を計算してみましょう。

vals1 = {1, 2, 3}
vals2 = {2, 3, 4}

intersection = vals1.intersection(vals2)
print(intersection)

intersection = vals1 & vals2
print(intersection)

実行結果

{2, 3}
{2, 3}

intersectionメソッドには複数の配列を指定可能で、リスト・タプルも指定できます。

vals1 = {1, 2, 3, 4}
vals2 = {2, 3, 4, 5}

intersection = vals1.intersection(vals2, [3, 4, 5, 6], (4, 5, 6, 7))
print(intersection)

実行結果

{4}

差集合[difference][-]

differenceメソッド、または演算子を使って差集合を計算できます。

差集合とは「ある集合から別の集合の要素を取り除いて残った要素」を集めます。
図では以下のようになります。

差集合 ベン図

書き方

以下のように記述します。

セット.difference(配列)

セット1 - セット2

サンプル

試しに差集合を計算してみましょう。

vals1 = {1, 2, 3}
vals2 = {2, 3, 4}

difference = vals1.difference(vals2)
print(difference)

difference = vals1 - vals2
print(difference)

実行結果

{1}
{1}

differenceメソッドは複数の配列を指定可能で、リスト・タプルも指定できます。

vals = {1, 2, 3, 4, 5}

difference = vals.difference([2, 3], (4, 5))
print(difference)

実行結果

{1}

対称差集合[symmetric_difference][^]

symmetric_differenceメソッド、または^演算子を使って対称差集合を計算できます。

対称差集合とは「どちらか片方のみに存在する要素」を集めます。
図では以下のようになります。

対称差集合 ベン図

書き方

以下のように記述します。

セット1.symmetric_difference(セット2)

セット1 ^ セット2

サンプル

試しに対称差集合を計算してみましょう。

vals1 = {1, 2, 3}
vals2 = {2, 3, 4}

s_d = vals1.symmetric_difference(vals2)
print(s_d)

s_d = vals1 ^ vals2
print(s_d)

実行結果

{1, 4}
{1, 4}

symmetric_differenceメソッドは同時に複数の配列を指定できません。さらに、他のメソッドとは違いセット同士でしか計算できません。

同時に複数の計算がしたい場合は演算子を使ってください。

vals1 = {1, 2, 3}
vals2 = {2, 3, 4}

s_d = vals1 ^ vals2 ^ {3, 4, 5}
print(s_d)

実行結果

{1, 3, 5}

まとめ

この記事では、セットの使い方を解説をしました。

今回のおさらい

  • セットとは = 『重複する要素を持てない配列・集合』
  • セットの初期化 = 『s = {1, 2, 3}』
  • 集合演算 = 『union(|)、intersection(&)、difference(-)、symmetric_difference(^)』

セットを使うことで配列内の重複している要素をまとめて削除できたり、集合演算で役立つので覚えておきましょう。

集合演算にのみに使用する場合はfrozensetを使いましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

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