【Python初心者】集合とは何か|基本からメソッドまでを分かりやすく解説

「集合」は、Pythonにおけるリストや辞書に似た、複数の値を扱うことができるデータ型です。

「集合」という名前の通り、数学における「集合」の概念とよく似ています

この記事では、「Pythonにおける『集合』とはどういうものか」「Pythonにおける集合の使い方」を説明します。

初学の段階ではあまり出てきませんが、データ型の雰囲気を掴むために、ぜひ押さえておきましょう!

Pythonのプログラミング学習に不安を感じている方へ

AIやデータサイエンスを学びたくてPythonを学び始めたけど
「独学ではやっぱり限界がある」
と不安を感じた方にオススメしたいのが、Aidemy Premium Plan
AIに関する幅広い種類の講座徹底したコーチング指導が特徴です!

実務を見据えてPythonをがっつり学習していきたい方は、まずは無料の「オンライン相談」に参加してみてください。

また、Aidemy Premium Planのメリットやデメリットなどについては、以下の記事も参考にしてください。
Aidemy(アイデミー)の評判と口コミまとめ!受講したほうがいい理由を紹介

Pythonで使用されるリストとは

初めに、Pythonで使用される「リスト」とは何かについて説明します。

まずは押えておきたいデータ型

Pythonでは、我々が見ている文字の種類を、見えない次元で区別しています。

例えば、「1」と表示されている場合でも、それが文字としての「1」なのか、整数としての「1」なのかで処理の方法が変わります。

「1」を文字として捉えた場合、「1」+「1」は、「1」と「1」を横に並べるという解釈になり、「11」が出力されます。

一方、「1」を整数として捉えた場合の「1」+「1」は、小学校1年生のときに習った足し算と同様に、「2」という結果が出力されます。

以下は、Pythonの基本的なデータ型をまとめました。

データ型
整数(int) -2, -1, 0, 1,2
浮動小数点数(float) -1.5, -0.75, 0.0, 1.7, 3.28
文字列 ‘a’, ‘bb’, ‘あいう’, ‘6日’

集合は複数のデータを扱うことができる型

集合は、整数・浮動小数・文字列といったデータ型を複数含むことができる箱のようなものです。

例えば、
animals = {‘dog’, ‘cat’, ‘rabbit’, ‘elephant’}
という形をしており、これはanimalsという箱の中に4つの文字列を含んでいることを意味します。

また、集合は順序を持たず、重複した要素を持ちません。

つまり、

number = {0, 1, 2, 0, 1, 1, 7}

という風に集合をつくろうとすると、
number = {0, 1, 2, 7}
と解釈され、順番が異なったり同じ要素がまとめられたりします。

また、集合の中には、異なる型の要素を入れることができますが、リスト型のような変更可能(ミュータブル)な型は入れることができません。

集合の他にも、複数のデータを含むデータ型は存在します。
以下の表をご覧ください。

         

データ型 説明
リスト 一度定義しても後から変更することができるデータ型
タプル リストとほぼ同様だが、一度定義したら変更することができないデータ型
辞書 リストにおけるインデックスを任意の値(キー)に設定できるデータ型
集合 数学の集合の概念と似ており、重複した要素がなく、順序を持たないデータ型

集合型の使いどころ

Pythonの集合型は以下のような時に役立ちます。

  • 重複する値を一つにしたいとき
  • 全てのグループに現れている値を抽出したいとき

集合を使用することで、データ処理がとても簡単になります。

数学の集合の考え方に慣れていない方にはやや難しいかもしれませんが、和集合・差集合・積集合などを使うことで、短く簡潔なコードを書くことができるのです。

Pythonにおける集合の基本操作

ここでは、集合を作成(定義)するところから、追加・削除・要素数を数えるといった基本操作を解説します。

集合の作成(定義)

集合を定義する方法は2つあります

{}で作成

(集合名) = {(集合の要素)}とすることで集合を定義できます。
[code language=”python”]number = {0, 1, 2, 0, 1, 1, 7} #集合を定義
print(number) # {0, 1, 2, 7}[/code]
これは、numberという名前のリストに、0、1、2、0、1、1、7という要素を入れた結果、重複している要素が統一され、0、1、2、7というデータ群になったことを示します。

set()関数・frozenset()関数で作成

(集合名) = set((集合の要素))とすることでリストを定義できます。
[code language=”python”]numberList = [0, 1, 2, 0, 1, 1, 7] # リストを定義
numberSet = set(numberList) # 集合を定義
print(numberSet) # {0, 1, 2, 7}
[/code]

集合は基本、変更可能(ミュータブル)なかたちで生成されます。

後から要素を追加・変更・削除ができない変更不可能(イミュータブル)な集合を生成したい場合は、set()関数の代わりに、frozenset()関数を使いましょう。

集合に値を追加する|add()メソッド

集合に値を追加する場合は、add()メソッドを使います。
[code language=”python”]even = {2, 4, 6} # 集合の定義
even.add(8) # 8を追加する
print(even) # {8, 2, 4, 6}[/code]

重複する値を追加した際は、反映されません。

集合の値を削除する|discard()メソッド・removeメソッド・clear()メソッド

集合の値を削除する際は、基本discard()メソッドを使用します。

discardメソッドは、引数に値を指定して削除することができます。

[code language=”python”]odd = {1, 2, 3, 5} # 集合を定義
odd.discard(2) # 2を削除
print(odd) # {1, 3, 5}[/code]

もし集合に含まれない値を引数に渡した場合、discard()メソッドはその処理を無視しますが、remove()メソッドはエラーを表示します(remove()メソッドの通常の使い方はdiscard()メソッドと同じです)。

clear()メソッドは、すべての要素を削除します(空集合の作成)。

[code language=”python”]empty = {1, 2, 3, 4, 5} # 集合を定義
empty.clear # すべての要素を削除
print(empty) # set()[/code]

集合の要素数を数える|len()関数

集合の要素数を数えるには、len()関数を使います。

[code language=”python”]number = {1, 2, 3, 4, 5} # 集合の定義
print(len(number)) # 5[/code]

Pythonにおける集合の数学的操作

Pythonでは、和集合・差集合・積集合・対象差集合などの数学的な集合の演算が可能です。

ここでは、それらの演算の意味と方法を説明します。

和集合|「|」演算子・union()メソッド

和集合とは、2つの集合を合わせた集合のことです。

重複する部分は、1つの値として解釈されます。

和集合生成の方法は、「|」演算子を用いるかunion()メソッドを用いるかの2つがあり、

(集合1) | (集合2)

とするか、

(集合1).union((集合2))

とします。

以下、2通りの和集合のプログラムを紹介します。

[code language=”python”]animals1 = {‘dog’, ‘cat’, ‘rabbit’} # 集合の定義
animals2 = {‘rabbit’, ‘elephant’} # 集合の定義
animals = animals1 | animals2 # 和集合
print(animals) # {‘elephant’, ‘rabbit’, ‘cat’, ‘dog’}[/code]

[code language=”python”]animals1 = {‘dog’, ‘cat’, ‘rabbit’} # 集合の定義
animals2 = {‘rabbit’, ‘elephant’} # 集合の定義
animals = animals1.union(animals2) # 和集合
print(animals) # {‘elephant’, ‘rabbit’, ‘cat’, ‘dog’}[/code]

‘rabbit’は重複しているので、統一されました。

差集合|「-」演算子・difference()メソッド

差集合とは、一方の集合からもう一方の集合と共通する値を削除した集合のことです。

積集合生成の方法は、「|」演算子を用いるかunion()メソッドを用いるかの2つがあり、

(集合1) – (集合2)

とするか、

(集合1).difference((集合2))

とします。

以下、2通りの差集合のプログラムを紹介します。

[code language=”python”]number1 = {1, 2, 3, 5, 8 ,13} # 集合の定義
number2 = {2, 4, 6, 8} # 集合の定義
number = number1 – number2 # 差集合
print(number) # {1, 13, 3, 5}[/code]

[code language=”python”]number1 = {1, 2, 3, 5, 8 ,13} # 集合の定義
number2 = {2, 4, 6, 8} # 集合の定義
number = number1.difference(number2) # 差集合
print(number) # {1, 13, 3, 5}[/code]

積集合|「&」演算子・intersection()メソッド

積集合とは、2つの集合の共通部分から構成される集合のことです。

積集合生成の方法は、「&」演算子を用いるかintersection()メソッドを用いるかの2つがあり、

(集合1) & (集合2)

とするか、

(集合1).intersection((集合2))

とします。

以下、2通りの差集合のプログラムを紹介します。

[code language=”python”]number1 = {1, 2, 3, 5, 8 ,13} # 集合の定義
number2 = {2, 4, 6, 8} # 集合の定義
number = number1 & number2 # 積集合
print(number) # {8, 2}[/code]

[code language=”python”]number1 = {1, 2, 3, 5, 8 ,13} # 集合の定義
number2 = {2, 4, 6, 8} # 集合の定義
number = number1.intersection(number2) # 積集合
print(number) # {8, 2}[/code]

対称差集合|「^」演算子・symmetric_difference()メソッド

対称差集合とは、2つの集合の共通しない部分を合わせた集合のことです。

対称差集合生成の方法は、「^」演算子を用いるかsymmetric_difference()メソッドを用いるかの2つがあり、

(集合1) ^ (集合2)

とするか、

(集合1).symmetric_difference((集合2))

とします。

以下、2通りの差集合のプログラムを紹介します。

[code language=”python”]number1 = {1, 2, 3, 5, 8 ,13} # 集合の定義
number2 = {2, 4, 6, 8} # 集合の定義
number = number1 ^ number2 # 対称差集合
print(number) # {1, 3, 4, 5, 6, 13}[/code]

[code language=”python”]number1 = {1, 2, 3, 5, 8 ,13} # 集合の定義
number2 = {2, 4, 6, 8} # 集合の定義
number = number1.symmetric_difference(number2) # 対称差集合
print(number) # {1, 3, 4, 5, 6, 13}[/code]

最後に: Pythonの集合型をマスターしよう

Pythonの集合型は、データ型を押さえる上で大切な要素です。

集合型をしっかり理解して、Pythonでたくさんプログラムを書いていきましょう!