【Python入門】これで完璧!Set型(集合型)の基礎から応用まで

  • 2025.06.27
       
【Python入門】これで完璧!Set型(集合型)の基礎から応用まで

プログラミングには、配列やタプルなど、複数の値をまとめて扱うための機能がいずれの言語でも用意されています。

Pythonはその中の一つに、集合を扱うためのデータ型であるset型があります。
今回の記事では、set型の基本的な使い方から応用方法まで、詳しく解説していきたいと思います。

Pythonのset型とは?

set型は、Pythonで集合を表すためのデータ型です。
複数の要素を扱うリスト型とデータ構造が似ていますが、主に以下の2点が大きく異なります。

・要素の重複を許容しない
・格納された要素に順番がない

既存のリストを元に作成することも可能なため、要素の重複を排除したい場合などに使用すると便利な型です。

一方で、set型は上述したように順序性がなく、格納順が異なっていても要素が同一であれば同じデータであるとみなされます。
要素の順序を管理する必要がある場合には、リスト型の使用が適しています。

set型の基本的な使い方

それでは早速、set型の使い方について見ていきましょう。
まずは、基本的な使い方から解説していきます。

set型の基本構文と使い方

set型のオブジェクトは、{}(波括弧)を使用することで生成できます。

【基本構文】

変数名 = {値, 値, ...}

【サンプルコード】

sampleSet = {10, 20, 20, 30, 40, 50}

print(sampleSet)

【実行結果】

{50, 20, 40, 10, 30}

オブジェクトを生成する際に、重複する要素は自動で取り除かれます。
また、set型は順序性がないため、生成時の要素の順番は保持されません。

空のオブジェクトを生成したい場合は、set() を使用します。
{} のみの記述で生成しようとすると、辞書と見なされてしまうため注意が必要です。

【サンプルコード】

sampleSet = set()
sampleDict = {}

print(sampleSet)
print(type(sampleSet))

print(sampleDict)
print(type(sampleDict))

【実行結果】

set()
<class 'set'>
{}
<class 'dict'>

setに要素を追加する

オブジェクトに要素を追加する場合は、addメソッドを使用します。

【サンプルコード】

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

sampleSet.add(6)

print(sampleSet)

【実行結果】

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

既にある要素を追加した場合、エラーは発生しませんが値が新しく追加されることはありません。

setから要素を削除する

set型オブジェクトから特定の要素を削除したい場合は、removeメソッドを使用します。

【サンプルコード】

sampleSet = {1, 2, 3, 4, 5, 6}

sampleSet.remove(6)

print(sampleSet)

【実行結果】

{1, 2, 3, 4, 5}

指定した要素がオブジェクト内に存在しないとエラーが発生するので、削除する際には注意が必要です。

また、単一の要素ではなく、オブジェクト内の全ての要素を一度に削除したい場合は、clearメソッドを使用すると便利です。

【サンプルコード】

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

sampleSet.clear()

print(sampleSet)

【実行結果】

set()

set型でできる集合の計算

set型オブジェクトを使用するメリットの1つに、集合演算を行うことができる点があります。
集合演算とは、2つの集合から一定の規則に基づいて新たな集合を作り出すことを言います。

set型で行える集合演算には、以下の4つの種類があります。

・和集合
・積集合
・差集合
・対称差集合

それぞれの演算方法について、解説していきたいと思います。

和集合の計算

まずは、和集合の計算方法から見てみましょう。

和集合を行うと、2つの set型オブジェクトの要素を全て含む新しいオブジェクトが、結果として返却されます。

和集合の計算は、「|」 (パイプ演算子) を使用して行います。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA | setB

print(setC)

【実行結果】

{'りんご', 'いちご', 'みかん', 'ぶどう', 'もも'}

このように、互いが持つ要素を1つにまとめたオブジェクトが新しく生成されます。
和集合によって新しくオブジェクトを生成する場合も、重複する要素は自動で取り除かれます。

また、パイプの演算子の代わりに、unionメソッドを使用して和集合を作ることもできます。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA | setB

print(setC)

※実行結果は先ほどのパイプ演算子の例と同じになるため省略しています。

なお、和の計算と言うと +演算子を思い浮かべるかもしれませんが、残念ながら set型オブジェクトに対しては使用することができないため、注意が必要です。

積集合の計算

次に、積集合の計算方法を見てみましょう。

積集合を行うと、どちらのオブジェクトにも存在する要素のみを含んだ新しいオブジェクトが、結果として返却されます。

積集合の計算は、「&」(アンパサンド演算子)を使用して行います。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA & setB

print(setC)

【実行結果】

{'りんご'}

上記の結果を見ると、両方のオブジェクトに存在する要素のみが含まれているのが分かると思います。

積集合は、アンパサンド演算子の代わりに intersectionメソッドを使用して計算することもできます。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA.intersection(setB)

print(setC)

※実行結果は変わらないので省略しています

差集合の計算

続いて、差集合の計算方法について見てみましょう。

差集合を行うと、両方のオブジェクトに含まれる要素を左側のオブジェクトから取り除いた結果が、新しいオブジェクトとして返却されます。

差集合の計算は、「-」 (マイナス演算子) を使用して行います。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA - setB

print(setC)

【実行結果】

{'ぶどう', 'みかん'}

上記のコードの場合、互いのオブジェクトに 「りんご」 の文字列が含まれているため、変数 setA から該当の要素を除いた結果が表示されています。

差集合は、differenceメソッドを使用して計算することもできます。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA.difference(setB)

print(setC)

※実行結果は同一のため省略しています

対称差集合の計算

最後に、対称差集合の計算方法について見ていきましょう。

対称差集合は、差集合と同様にどちらのオブジェクトにも含まれる要素を除外しますが、それ以外の要素は全て含んだ状態で新しいオブジェクトを生成し、計算結果として返却します。

対称差集合の計算は、「^」 (キャレット演算子) を使用して行います。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA ^ setB

print(setC)

【実行結果】

{'みかん', 'もも', 'ぶどう', 'いちご'}

先ほどのサンプルコードと比較すると、差集合では除外されていた文字列が結果に含まれているのが分かると思います。

対称差集合は、symmetric_differenceメソッドを使用することでも計算が可能です。

【サンプルコード】

setA = {'りんご', 'みかん', 'ぶどう'}
setB = {'りんご', 'もも', 'いちご'}

setC = setA.symmetric_difference(setB)

print(setC)

※実行結果は同一のため省略しています。

setの応用的な使い方

ここからは、set型オブジェクトの応用方法について解説していきます。

リストからsetを作る

空のオブジェクトを生成する際にも使用する 「set()」 を活用することで、リストやタプルを set型オブジェクトに変換することができます。

【サンプルコード】

sampleList = [1, 2, 1, 3, 2, 5]

print(set(sampleList))

【実行結果】

{1, 2, 3, 5}

順序を気にする必要がなく、重複した要素を取り除きたい場合などに使える応用方法です。

複数のリスト内の重複を削除して結合する

既存のリストを set型オブジェクトに変換することで、先ほど解説した集合演算が活用できるようになります。

リスト同士をそのまま結合する場合、重複した要素を自動で取り除くことはできないため、要素を除外した上で結合したいケースなどに活用することができます。

【サンプルコード】

sampleListA = [1, 2, 1, 3, 2]
sampleListB = [4, 3, 5, 1, 2]

sampleSet = set(sampleListA) | set(sampleListB)

print(sampleSet)

【実行結果】

{1, 2, 3, 4, 5}

なお、余談ですが、set型オブジェクトを反対にリストやタプルへと変換することも可能です。

【サンプルコード】

sampleSet = {1, 2, 1, 3, 2}

print(list(sampleSet))

【実行結果】

[1, 2, 3]

まとめ

いかがでしたか?
今回は、Pythonの set型の使い方について解説しました。

複数の値を1つのオブジェクトにまとめて扱う方法としてよく使用されるのは、リスト型や辞書型などが代表的かと思いますが、set型もまた便利な機能を備えています。

この機会に、ぜひ活用してみてくださいね!

まとめ

いかがでしたか?今回は、replaceメソッドの使い方について解説しました。
文字列を置換することはよく起こり得るケースですので、使い方をしっかりと理解して覚えておくことをオススメします。

また、今回紹介したメソッドや正規表現を使用するやり方の他にも、文字列を置換する方法はいくつか存在します。
それぞれ機能の特徴が異なり、使い分けできるようにしておくと後々の役に立つため、機会があれば調べておくと良いでしょう。

Pythonの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、Pythonに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Programmingカテゴリの最新記事