(最終更新月:2022年11月)
✔当記事はこのような方に向けて書かれています
「Pythonのsetで何ができるのだろうか?」
「Python setの使い方が知りたい」
「setで使える属性やメソッドについて詳しく知りたい」
✔当記事を通じてお伝えすること
- Python setの基本構成
- Python setと辞書の違い・注意点
- setで使える属性一覧
当記事では、Pythonのsetについての基本事項だけでなく、さまざまなコードや実例までご理解いただけます。
ぜひ最後までご覧ください。
Pythonのsetについて知っておくべき基本事項3選

当記事では、Pythonのsetについて、基本事項をお伝えします。
具体的な使い方を知る前に、まずは基本的なことをすべて網羅しておきましょう。
- Pythonのsetとは?
- setの作り方
- setと辞書の違い|作る際の注意点
Pythonのsetとは?
Pythonのsetは、データ型のひとつで、集合を扱うものです。
set型の特徴は以下のとおり。
- それぞれがユニークな要素である(重複しない)
- set間の和や差、積を求められる
- 要素はすべて順不同
以下、setの例です。
>>> sports
{'basketball', 'baseball', 'soccer'}
>>> type(sports)
<class 'set'>
setとfrozensetについて
set型に近しいものとして、frozensetがあります。
frozensetは、set型のタプルともいえる、データが固定されたものです。
またset型とfrozenset型で以下のようなことも。
- frozenset()で、set型をfrozenset型へ
- set()で、frozenset型をset型へ
先程のset型「sports」を使った例は、以下のとおり。
>>> frozen_sports = frozenset(sports)
>>> frozen_sports
frozenset({'basketball', 'baseball', 'soccer'})
>>> type(frozen_sports)
<class 'frozenset'>
>>> type(set(frozen_sports))
<class 'set'>
setと辞書の違い|作る際の注意点
setは、{}で囲われた型なので、辞書と似ています。
しかし、キーが無いため、特定の値を取り出せないのが特徴です。
辞書と混合しないために気を付けるべき点は、空のsetを作るとき。
空のset型を作る時は、以下のとおりです。
empty_set = set()
#以下は辞書になる
empty_dict = {}
Python setを作る方法3選

Pythonのsetを作る方法を複数ご説明します。
どんな集合体を作りたいのかで、適切なやり方は異なるのです。
- set関数を使う
- { }を使う
- 内包表記を使う
set関数を使う
set関数を使えば、set型が作れます。
- 空のset型を作る
- ほかのデータ型から返還する
空のset型を作る
空のデータ型は、set関数で簡単に作れます。
>>> empty_set = set()
ほかのデータ型から返還する
set関数を使えば、ほかのデータ型からの変換が可能。
リスト型をset型へ
>>> fruits_list
['banana', 'apple', 'pineapple']
>>> set(fruits_list)
{'banana', 'pineapple', 'apple'}
タプル型をset型へ
>>> fruits_tuple
('banana', 'apple', 'pineapple')
>>> set(fruits_tuple)
{'banana', 'pineapple', 'apple'}
辞書型をset型へ
>>> fruits_dictionary
{1: 'banana', 2: 'apple', 3: 'pineapple'}
>>> set(fruits_dictionary)
{1, 2, 3}
#値をset型にする
>>> set(fruits_dictionary.values())
{'banana', 'pineapple', 'apple'}
文字列型をset型へ
>>> fruit_string
'banana'
>>> set(fruit_string)
{'a', 'n', 'b'}
1文字ずつとなり、重複したものは削除されます。
{ }を使う
{}を使い、setも作れます。
>>> menu = {"pasta", "pizza", "tacos"}
>>> type(menu)
<class 'set'>
文字列に使うと、文字列がそのままset型になります。
>>> a_food = "pasta"
>>> a_food_set = {a_food}
>>> a_food_set
{'pasta'}
>>> type(a_food_set)
<class 'set'>
set関数を使うと、一文字にずつに分割されますが、{} を使うとまとまって、set内に格納されます。
内包表記を使う
内包表記でも、setを作れます。
>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> nums_set = {i*i for i in nums}
>>> nums_set
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
>>> type(nums_set)
<class 'set'>
要素を追加するメソッド:add

set型に値を追加する時は、addを使います。
set型.add(要素)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> langs.add("Swift")
>>> langs
{'JavaScript', 'PHP', 'Python', 'Swift', 'Java'}
集合に集合を追加する方法3選

要素ひとつだけ追加するのではなく、集合を集合に追加する方法があります。
- union
- update
- 演算子「 | 」
union
unionは、既存のset型を変更せず、2つのset型を結合した新しいものを作ります。
set型①.union(set型②)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> frameworks = {'React', 'Laravel', 'Django'}
>>> langs.union(frameworks)
{'Java', 'Python', 'React', 'Django', 'JavaScript', 'PHP', 'Laravel'}
>>> langs
{'PHP', 'Python', 'JavaScript', 'Java'} #既存のものは変更されていない
>>> frameworks
{'React', 'Laravel', 'Django'} #既存のものは変更されていない
演算子「 | 」
「|」でも、新しいset型が生成されます。
set型①|set型②
>>> langs|frameworks
{'Java', 'Python', 'React', 'Django', 'JavaScript', 'PHP', 'Laravel'}
update
updateを使うと、set型①にset型②を加えた形になります。
set型①.update(set型②)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> frameworks = {'React', 'Laravel', 'Django'}
>>> langs.update(frameworks)
>>> langs
{'Java', 'Python', 'React', 'Django', 'JavaScript', 'PHP', 'Laravel'}

要素を削除するメソッド4選

要素を削除する方法をお伝えします。
- remove
- pop
- discard
- clear
remove
removeは単に、指定した要素を取り除くメソッドです。
値が存在しない場合はエラーになります。
set型.remove(要素)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> langs.remove('Java')
>>> langs
{'PHP', 'Python', 'JavaScript'}
#値が存在しないとエラーになる
>>> langs.remove("Go")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Go'
pop
popメソッドを使うと、ランダムにひとつだけ要素を取り出せます。
set型.pop(要素)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> popped_lang = langs.pop()
>>> popped_lang
'PHP'
>>> langs
{'Python', 'JavaScript', 'Java'}
discard
単に要素を削除するもの。
ただし、値が存在しないと何もおこらない。
set型.discard(要素)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> langs.discard("JavaScript")
>>> langs
{'PHP', 'Python', 'Java'}
>>> langs.discard("Go")
>>> langs
{'PHP', 'Python', 'Java'}
clear
clearメソッドは、set型を空にします。
set型.clear(要素)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> langs.clear()
>>> langs
set()
要素の数を数える:len

len(set型)
>>> langs = {'PHP', 'Python', 'JavaScript', 'Java'}
>>> len(langs)
4
要素の共通部分を見つける(積集合):intersection

積集合とは、複数のset型で共通するものを見つけ出すこと。
以下の2通りの方法があります。
- intersection
- 演算子「&」
intersection
set型①.intersection(set型②)
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
>>> pitchers.intersection(batters)
{'大谷'}
演算子「&」
set型①&set型②
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
>>> pitchers&batters
{'大谷'}
集合間の違いを洗い出す(差集合・対象差集合)

集合間の違いを洗い出す方法です。
- 差集合:difference・演算子「-」
- 対象差集合:symmetric_difference・演算子「^」
差集合:difference・演算子「-」
差集合とは、ひとつの集合からもう一つの集合に含まれている要素を差し引いたもの。
どちらからどちらを引くかにより、答えが異なります。
difference
set型①.difference(set型②)
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
#ピッチャー - バッター
>>> pitchers.difference(batters)
{'ダルビッシュ', '前田'}
#バッター - ピッチャー
>>> batters.difference(pitchers)
{'松井', 'イチロー'}
演算子「-」
set型① – set型②
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
#ピッチャー - バッター
>>> pitchers - batters
{'ダルビッシュ', '前田'}
#バッター - ピッチャー
>>> batters - pitchers
{'松井', 'イチロー'}
対象差集合:symmetric_difference・演算子「^」
対象差集合とは、どちらかに含まれているものを取り出します。
intersectionや「&」で取り出せる要素以外のものです。
- symmetric_difference
- 演算子「^」
symmetric_difference
set型①.symmetric_difference(set型②)
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
>>> pitchers.symmetric_difference(batters)
{'イチロー', 'ダルビッシュ', '松井', '前田'}
演算子「」^
set型①^set型②
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
>>> pitchers^batters
{'イチロー', 'ダルビッシュ', '松井', '前田'}
部分集合・上位集合

集合の親子関係を調べる方法です。
返す値は、Boolean型(TrueもしくはFalse)になります。
- 部分集合:issubset・演算子「<=」
- 上位集合:issuperset・演算子「>=」
部分集合:issubset・演算子「<=」
set型①がset型②の部分集合であるかを、True/Falseで返します。
set型①.issubset(set型②)
set型①<=set型②
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
>>> players = pitchers.union(batters) #playersは、pitchersとbattersの和集合
#issubset関数
>>> pitchers.issubset(batters)
False
>>> pitchers.issubset(players)
True
#演算子「<=」
>>> pitchers<=batters
False
>>> pitchers<=players
True
上位集合:issuperset・演算子「>=」
set型①がset型②の上位集合であるかを、True/Falseで返します。
set型①.issuperset(set型②)
set型①>=set型②
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
>>> players = pitchers.union(batters) #playersは、pitchersとbattersの和集合
#issuperset関数
>>> pitchers.issuperset(players)
False
>>> players.issuperset(pitchers)
True
#演算子「>=」
>>> pitchers >= players
False
>>> players >= pitchers
True
集合体をコピーする:copy

集合体をコピーする方法は以下のとおり。
set型.copy()
>>> pitchers
{'ダルビッシュ', '大谷', '前田'}
>>> pitchers2 = pitchers.copy()
>>> pitchers2
{'ダルビッシュ', '大谷', '前田'}
同じ要素がないかをチェックする:isdisjoint

isdisjoint関数は、同じ要素がないかをチェックします。
同じ要素があれば、Falseとなります。
set型①.isdisjoint(set型②)
>>> pitchers = {"大谷", "前田", "ダルビッシュ"}
>>> batters = {"大谷", "イチロー","松井"}
#大谷がどちらにもいるので、Falseとなる
>>> pitchers.isdisjoint(batters)
False
#大谷を取り除くと、Trueとなる
>>> pitchers.remove("大谷")
>>> pitchers.isdisjoint(batters)
True
まとめ:Pythonのsetを活用すると、集合体でさまざまなことができる

当記事の内容をまとめます。
- set型とは、重複しない要素が入った集合体のこと
- setを作るのは、set関数、もしくは{}を使う
- set型同士で、和集合や差集合、積集合が作れる
Pythonのset型はあまり目に触れる機会がないかもしれません。
ただし、一度覚えるとかなり便利なことにも気づけたはず。
ぜひここでsetをマスターして、あなたのコーディングに活かしてください。
✔当ブログは以下のような方に向けて書かれています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
✔当ブログ掲載の記事
- Djangoで作る日報アプリ開発
- WebアプリをWeb上に公開する方法
- Webアプリ開発に必要なそのほかの情報

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。