集合(set型/セット)とはその名の通り数学の「集合」概念をコンピュータの世界に取り入れたもので、複数のユニークな(重複しない)要素を無順序で保持するデータ構造です。
参考 Pythonの特徴
集合を用いることで、重複要素の除去、集合間の演算(和集合、積集合、差集合など)といった、特定の問題に対する効率的な操作を可能にします。
Pythonでは、これらの集合を扱うための専用のデータ型と様々な操作が提供されており、これを効果的に活用することでコードの質を向上させることが可能になります。
この記事では、Pythonでの集合の作成方法から、基本的な操作、集合の応用までを初心者向けに分かりやすく解説します。
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
Python:集合(セット)とは?
Pythonの集合型(set)は、一意な要素(重複しない要素)を無順序で保持することが特徴のデータ型です。これは数学における集合の概念に基づいています。
集合型(set)を理解するにはリストやタプルをベースに「それらとは何が違うか?」を考えていくとわかりやすいです。
Pythonのリストとの違い
リストは、順序を保持するデータ型で、重複した要素を含むことができます。それに対して、集合は順序を持たず、重複した要素を持つことができません。これは、例えば重複した要素を取り除きたい時に便利です。
実際にサンプルコードを例に説明するとわかりやすいので以下に載せておきます。
(コードの説明は後ほど詳しく解説します。)
my_list = [1, 2, 2, 3, 4, 4, 5, 5] print(my_list) # 結果: [1, 2, 2, 3, 4, 4, 5, 5] my_set = set(my_list) print(my_set) # 結果: {1, 2, 3, 4, 5}
参考 Python:リスト / print関数
Pythonのタプルとの違い
タプルもリストと同じく順序を保持するデータ型で、重複した要素を含むことができます。タプルはイミュータブル(変更不可能)なデータ型であるのに対し、集合はミュータブル(変更可能)なデータ型です。つまり、集合は作成後に要素の追加や削除が可能です。
以下のように、集合はリストやタプルとは異なる特性を持ち、これらを理解することで適切な場面で適切なデータ型を選択することができます。
my_tuple = (1, 2, 2, 3, 4, 4, 5, 5) print(my_tuple) # 結果: (1, 2, 2, 3, 4, 4, 5, 5) my_set = set(my_tuple) my_set.add(6) print(my_set) # 結果: {1, 2, 3, 4, 5, 6}
次のセクションでは、Pythonでの集合の作成方法について詳しく見ていきましょう。
Python:集合(set)の作成方法
Pythonで集合を扱うには、まず集合の作り方を理解する必要があります。Pythonで集合を作る方法は大きく分けて二つあります。
それぞれサンプルコード付きで詳しく解説します。
Pythonの集合の定義①:波括弧{}
最も直接的な集合の作成方法は、波括弧({})を用いる方法です。
波括弧の中にカンマで区切った要素を書くことで集合を作成することができます。この方法で作成した集合は順序を保持せず、重複した要素を持つことはありません。
# 数字の集合を作成 numbers = {1, 2, 3, 4, 5} print(numbers) # Output: {1, 2, 3, 4, 5} # 文字列の集合を作成 fruits = {"apple", "banana", "cherry"} print(fruits) # Output: {'apple', 'cherry', 'banana'}
Pythonの集合の定義②:set関数
set関数を用いて集合を作成する方法があります。set関数は、引数として渡されたイテラブル(繰り返し可能な)オブジェクトの要素から集合を作成します。この際、重複した要素は除かれます。
# リストから集合を作成 my_list = [1, 2, 2, 3, 4, 4, 5, 5] numbers = set(my_list) print(numbers) # Output: {1, 2, 3, 4, 5} # 文字列から集合を作成(文字列もイテラブルなので、各文字が要素となる) alphabet = set("abracadabra") print(alphabet) # Output: {'a', 'b', 'r', 'c', 'd'}
また、set関数を引数なしで呼び出すと、空の集合を作成することができます。このとき、波括弧{}だけを使ってしまうと、空の辞書が作成されてしまうので注意が必要です。
# 空の集合を作成 empty_set = set() print(empty_set) # Output: set()
以上がPythonで集合を作り出す基本的な方法です。
この後の章では、これらの集合に対してどのように操作を行うのか、さらには集合間でどのような演算が可能なのかを見ていきましょう。
Pythonの集合の操作
Pythonの集合(set)に対しては追加・変更・削除などの様々な操作が可能です。ここでは主な操作方法をいくつか紹介します。
set型:要素の追加
集合に新たな要素を追加するには、add
メソッドを使用します。
このメソッドは、引数として追加したい要素を1つだけ指定します。その要素がすでに集合に存在していなければ指定した要素が集合に追加されます。
集合は重複する要素を持たないため、仮にすでに存在する要素を追加しようとしても集合は変化しません。
fruits = {"apple", "banana", "cherry"} fruits.add("orange") # "orange"を追加 print(fruits) # Output: {'orange', 'apple', 'banana', 'cherry'} fruits.add("apple") # "apple"はすでに存在するので、何も変化しない print(fruits) # Output: {'orange', 'apple', 'banana', 'cherry'}
set型:要素の削除
集合から特定の要素を削除するには、remove
メソッドまたはdiscard
メソッドを使用します。これらのメソッドでは引数として削除したい要素を指定します。
remove
メソッドは、指定した要素が集合に含まれていない場合、エラー(KeyError)を引き起こします。
そのため、removeメソッドを使用する際には、削除しようとしている要素が確実に集合に存在することを確認してから使用するか、try-except文を使用してエラーを適切に処理する必要があります。
fruits = {"apple", "banana", "cherry"} fruits.remove("banana") # "banana"を削除 print(fruits) # Output: {'apple', 'cherry'} # fruits.remove("kiwi") # "kiwi"は存在しないので、エラー(KeyError)が発生する # print(fruits)
参考 try-except文
discard
メソッドは、指定した要素が集合に含まれていない場合でもエラーを引き起こしません。そのため、エラーを気にせず安全に要素を削除したい場合にはこちらのメソッドを使用します。
fruits = {"apple", "banana", "cherry"} fruits.discard("banana") # "banana"を削除 print(fruits) # Output: {'apple', 'cherry'} fruits.discard("kiwi") # "kiwi"が存在しなくてもエラーにならない print(fruits) # Output: {'apple', 'cherry'}
set型:「全」要素の削除
集合から全ての要素を削除し、空の集合にするにはclear
メソッドを使用します。このメソッドは引数を必要としません。
fruits = {"apple", "banana", "cherry"} fruits.clear() # 全ての要素を削除 print(fruits) # Output: set()
set型:要素の検索(存在確認)
ある要素が集合に存在するかを確認するには、in
キーワードを使用します。
in
キーワードは、指定した要素が集合に存在していればTrue
を、存在していなければFalse
を返します。
fruits = {"apple", "banana", "cherry"} print("apple" in fruits) # "apple"が存在するか確認 # Output: True print("kiwi" in fruits) # "kiwi"が存在するか確認 # Output: False
以上がPythonの集合に対する基本的な操作です。これらの操作を組み合わせることで、集合に対して様々な操作を行うことが可能です。
次の章では、集合間の操作、つまり集合演算について詳しく見ていきましょう。
Pythonの集合演算
Pythonの集合では、数学的な集合演算がサポートされています。主に4つの基本的な集合演算があります:和(union)、積(intersection)、差(difference)、対称差(symmetric difference)です。
「集合演算」という用語にピンと来ない方でも大丈夫です。1つずつ、詳しく説明します。
集合演算①:和(union)
和演算は、2つの集合のすべての要素を結合します。
言い換えると、二つの集合AとBの和は、Aにも存在し、Bにも存在する要素、すべてを含む新しい集合を作ります。これはunion
メソッドを用いて実現します。
A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A.union(B) print(C) # Output: {1, 2, 3, 4, 5, 6}
unionは、|
演算子を用いることも可能です。
A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A | B print(C) # Output: {1, 2, 3, 4, 5, 6}
参考 Python:算術演算子
集合演算②:積(intersection)
積演算は、2つの集合の共通要素から新しい集合を作ります。言い換えると、2つの集合AとBの積は、AとBの両方に存在する要素のみを含む新しい集合を作ります。これはintersection
メソッドを用いて実現することができます。
A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A.intersection(B) print(C) # Output: {3, 4} ## &演算子を用いることも可能 A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A & B print(C) # Output: {3, 4}
集合演算③:差(difference)
差演算は、1つの集合からもう1つの集合の要素を取り除いた新しい集合を作ります。つまり、集合Aから集合Bの要素を取り除いた集合を作ります。これはdifference
メソッドを用いて実現します。
A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A.difference(B) print(C) # Output: {1, 2} ## -演算子を用いることも可能 A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A - B print(C) # Output: {1, 2}
集合演算④:対称差(symmetric difference)
対称差演算は、2つの集合のどちらか一方にのみ存在する要素から新しい集合を作ります。これは、和と積の差分を取ることに相当します。
わかりやすく言い換えると、AとBのどちらか一方にだけ存在する要素すべてを含む新しい集合を作ります。これはsymmetric_difference
メソッドを用いて実現できます。
A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A.symmetric_difference(B) print(C) # Output: {1, 2, 5, 6} ## ^演算子を用いることも可能 A = {1, 2, 3, 4} B = {3, 4, 5, 6} C = A ^ B print(C) # Output: {1, 2, 5, 6}
以上がPythonの集合演算の基本。これらを使いこなせば、様々な集合操作を行うことが可能になります。
これらの演算は新しい集合を返すので、元の集合は変更されません。そのため、集合を使うことでデータの整合性を保ちつつ、安全に操作を行うことができます。
Pythonの集合(set)の使いどころと活用例
Pythonの集合型は、そのユニークな特性と強力な機能から様々な場面で活用できます。以下では、その具体的な使いどころと活用例をいくつか紹介します。
サンプル1 ユニークな要素の抽出
リストやタプルなどの順序付けられたシーケンス型では、同じ値の要素が複数回現れることがあります。しかし、そのシーケンスからユニークな要素だけを抽出したい場合もあります。このような場合に、集合型を用いると簡単にユニークな要素だけを抽出できます。
numbers = [1, 1, 2, 2, 3, 3, 4, 4] unique_numbers = set(numbers) # リストから集合を作成 print(unique_numbers) # Output: {1, 2, 3, 4}
サンプル2 共通要素の探索
二つのシーケンスが与えられたときに、それらに共通する要素が何かを知りたい場合があります。このような場合にも、集合型とその積演算を用いることで簡単に共通要素を見つけ出すことができます。
list1 = ["apple", "banana", "cherry", "orange"] list2 = ["banana", "cherry", "kiwi"] common_fruits = set(list1) & set(list2) # リストから集合を作成し、積を取る print(common_fruits) # Output: {"banana", "cherry"}
サンプル3 条件を満たす要素の存在確認
集合にはin
キーワードを使用することで、特定の条件を満たす要素が集合に存在するかどうかを効率良く確認できます。
fruits = {"apple", "banana", "cherry"} print("apple" in fruits) # "apple"がfruitsに含まれているか確認 # Output: True print("kiwi" in fruits) # "kiwi"がfruitsに含まれているか確認 # Output: False
以上がPythonの集合の使いどころと活用例です。
これらを使いこなすことで、あなたのプログラムはより洗練され、効率的になるでしょう。Pythonの集合型が提供する強力な機能を活用して、さまざまな問題解決に挑戦してみてください。
Python:集合(set)のまとめ
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!