Python 速習チュートリアル

Python セットの結合

1. Python におけるセットの結合

Python では、2 つ以上のセット(集合)を結合したり、セット間の共通点や相違点を抽出したりする方法がいくつか用意されています。

主に以下のメソッドが使われます:

  • union() および update(): 両方のセットの全アイテムを結合します。
  • intersection(): 重複する(両方に存在する)アイテムのみを保持します。
  • difference(): 最初のセットにあり、もう一方のセットにはないアイテムを保持します。
  • symmetric_difference(): 重複するアイテム以外のすべてのアイテムを保持します。

2. Union(和集合)による結合

union() メソッドは、両方のセットのすべてのアイテムを含む新しいセットを返します。

2.1 union() メソッドの使用

union() を使用して、2 つのセットを結合して新しいセットを作成する例です。

set1 = {"a", "b", "c"}
set2 = {1, 2, 3}

# set1 と set2 を結合して新しいセットを作成
set3 = set1.union(set2)
print(set3)

2.2 | 演算子の使用

union() メソッドの代わりに | オペレータを使用しても、同じ結果が得られます。

set1 = {"a", "b", "c"}
set2 = {1, 2, 3}

# | オペレータで 2 つのセットを結合
set3 = set1 | set2
print(set3)

2.3 複数のセットを結合する

すべての結合メソッドやオペレータは、複数のセットに対しても使用可能です。メソッドの場合は、カンマ区切りで引数を追加します。

set1 = {"a", "b", "c"}
set2 = {1, 2, 3}
set3 = {"John", "Elena"}
set4 = {"apple", "bananas", "cherry"}

# 複数のセットを union で結合
myset = set1.union(set2, set3, set4)
print(myset)

| オペレータを使用する場合は、以下のように記述します。

set1 = {"a", "b", "c"}
set2 = {1, 2, 3}
set3 = {"John", "Elena"}
set4 = {"apple", "bananas", "cherry"}

# | オペレータで複数のセットを結合
myset = set1 | set2 | set3 | set4
print(myset)

2.4 セットとタプルを結合する

union() メソッドの強力な点は、セットだけでなくリストやタプルなどの他のイテラブル(反復可能オブジェクト)も結合できることです。結果は常にセットになります。

x = {"a", "b", "c"}
y = (1, 2, 3)

# セットとタプルを結合
z = x.union(y)
print(z)

注意: | オペレータはセット同士の結合にのみ対応しており、セットとタプルなどの異なるデータ型の結合には使用できません。

3. Update(更新)による結合

update() メソッドは、あるセットの全アイテムを別のセットに挿入します。このメソッドは元のセットを直接変更し、新しいセットを返しません。

set1 = {"a", "b" , "c"}
set2 = {1, 2, 3}

# set2 のアイテムを set1 に追加(set1 自体が更新される)
set1.update(set2)
print(set1)

注意: union()update() は、どちらも重複するアイテムを自動的に除外します。

4. Intersection(積集合)

積集合(インターセクション)は、重複する要素、つまり「両方のセットに存在する要素」のみを抽出します。

4.1 intersection() メソッド

intersection() メソッドは、両方のセットに存在するアイテムのみを含む新しいセットを返します。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# 両方に存在する "apple" だけを抽出して新しいセットを作成
set3 = set1.intersection(set2)
print(set3)

4.2 & 演算子

intersection() の代わりに & オペレータを使用することも可能です。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# & オペレータによる積集合
set3 = set1 & set2
print(set3)

注意: & オペレータもセット同士にのみ限定されます。

4.3 intersection_update() メソッド

intersection_update() メソッドも重複要素のみを保持しますが、新しいセットを返さずに元のセットを直接書き換えます。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# set1 を、両方に存在するアイテムのみに更新
set1.intersection_update(set2)
print(set1)

4.4 True/False と 1/0 の扱い

Python では True1False0 は同じ値として扱われます。セットの演算においても重複とみなされるため注意が必要です。

set1 = {"apple", 1, "banana", 0, "cherry"}
set2 = {False, "google", 1, "apple", 2, True}

# True/1、False/0 がどのように重複判定されるかの確認
set3 = set1.intersection(set2)
print(set3)

5. Difference(差集合)

差集合(ディファレンス)は、最初のセットには含まれているが、もう一方のセットには含まれていないアイテムを抽出します。

5.1 difference() メソッド

difference() メソッドは、最初のセットにのみ存在するアイテムを含む新しいセットを返します。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# set1 にあり set2 にはないアイテム(banana, cherry)を抽出
set3 = set1.difference(set2)
print(set3)

5.2 - 演算子

difference() の代わりに - オペレータを使用できます。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# - オペレータによる差集合
set3 = set1 - set2
print(set3)

5.3 difference_update() メソッド

difference_update() メソッドは、元のセットからもう一方のセットに含まれるアイテムを削除します。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# set1 から set2 にある要素を削除して更新
set1.difference_update(set2)
print(set1)

6. Symmetric Difference(対象差)

対象差は、両方のセットを見て「どちらか一方にのみ存在する要素」をすべて抽出します(共通部分は除外されます)。

6.1 symmetric_difference() メソッド

symmetric_difference() メソッドは、両方のセットに共通するアイテム以外のすべてを含む新しいセットを返します。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# 両方に共通する "apple" を除いた要素を抽出
set3 = set1.symmetric_difference(set2)
print(set3)

6.2 ^ 演算子

symmetric_difference() の代わりに ^ オペレータを使用できます。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# ^ オペレータによる対象差
set3 = set1 ^ set2
print(set3)

6.3 symmetric_difference_update() メソッド

symmetric_difference_update() メソッドは、元のセットを対象差の結果で書き換えます。

set1 = {"apple", "banana", "cherry"}
set2 = {"google", "microsoft", "apple"}

# set1 を、両方のセットで重複しないアイテムのみに更新
set1.symmetric_difference_update(set2)
print(set1)