更新:2024/09/16
Pythonのsetの集合演算・リストの重複削除・例題について


ふゅか
ねぇ、ふゅか!Pythonの
set
について知ってる?重複しない要素を扱えるから、リストより便利なときがあるんだよ♪
はるか
うん、知ってる。集合の概念がベースだね。要素の順番も気にしなくていいし。
目次
1. setとは
Pythonのset
は、重複しない要素のコレクションを管理するデータ型です。リストやタプルのように順序を持たず、要素は一意である必要があります。set
の使い方や特徴について、順を追って解説します。
1.1. setの基本
set
は波括弧 {}
を使って定義しますが、空のセットを作るには set()
を使用します。波括弧で作る場合は、要素をカンマで区切ります。
# 空のセットを作成
empty_set = set()
# 要素があるセットを作成
fruits = {"apple", "banana", "cherry"}
1.2. 重複を許さない
set
は同じ値を複数含むことができません。もし同じ値を追加しようとした場合、無視されます。
# 重複を含むリストからセットを作成
fruits = {"apple", "banana", "apple"}
print(fruits) # 出力: {'banana', 'apple'}
この例では、「apple」は一度しか含まれません。
1.3. 順序を持たない
set
は順序がないため、インデックスを使って要素にアクセスすることはできません。例えば fruits[0]
のようなアクセスはエラーになります。

ふゅか
順番は関係ないから、インデックスでアクセスはできないのよ〜。
1.4. 要素の追加と削除
set
では要素を追加したり削除したりすることができます。
- 追加:
add()
メソッドを使います。 - 削除:
remove()
やdiscard()
を使います。
fruits = {"apple", "banana"}
# 要素を追加
fruits.add("cherry")
print(fruits) # 出力: {'apple', 'banana', 'cherry'}
# 要素を削除
fruits.remove("banana")
print(fruits) # 出力: {'apple', 'cherry'}
# 存在しない要素を削除しようとするとエラーになる
# fruits.remove("banana") # KeyErrorが発生
# discard()はエラーを出さない
fruits.discard("banana")
仮にキーが存在しなときに、removeメソッドを使った場合次のようになります。
2. 集合演算
set
の大きな特徴は、集合に対する演算を効率的に行える点です。代表的な集合演算には、以下のようなものがあります。
- 和集合 (Union): 2つのセットのすべての要素を結合します。
|
またはunion()
を使用。 - 積集合 (Intersection): 2つのセットの共通部分を取り出します。
&
またはintersection()
を使用。 - 差集合 (Difference): 片方のセットにしかない要素を取り出します。“ または
difference()
を使用。 - 対称差集合 (Symmetric Difference): どちらか一方にしかない要素を取り出します。
^
またはsymmetric_difference()
を使用。
2.1. 基本的な集合の演算
A = {1, 2, 3}
B = {3, 4, 5}
# 和集合
print("和集合",A | B) # 出力: {1, 2, 3, 4, 5}
# 積集合
print("積集合",A & B) # 出力: {3}
# 差集合
print("差集合",A - B) # 出力: {1, 2}
# 対称差集合
print("対称差集合",A ^ B) # 出力: {1, 2, 4, 5}
2.2. その他
set
には便利な関数や演算子がいくつかあります。
len()
: セットの要素数を返します。in
演算子: 要素がセットに含まれているかどうかをチェックします。
fruits = {"apple", "banana", "cherry"}
# 要素数を取得
print(len(fruits)) # 出力: 3
# 要素の存在確認
print("apple" in fruits) # 出力: True
print("orange" in fruits) # 出力: False
2.3. 応用: リストの変換による重複削除
set
はリストやタプルとの相互変換が可能です。リストの重複要素を削除したいときに便利です。
# リストをセットに変換
my_list = [1, 2, 2, 3, 4, 4]
print(my_list)
my_set = set(my_list) # 重複が削除される
print(my_set) # 出力: {1, 2, 3, 4}
# セットをリストに変換
unique_list = list(my_set)
print(unique_list) # 出力: [1, 2, 3, 4]
3. 例題
3.1. 例題1:集合の演算
2つの集合
A = {1, 2, 3, 4, 5}
と B = {3, 4, 5, 6, 7}
が与えられています。この2つの集合に対して以下の演算を行い、その結果を求めなさい。
- A と B の和集合
- A と B の積集合
- A と B の差集合(A – B)
- A と B の対称差集合
期待される出力:
和集合: {1, 2, 3, 4, 5, 6, 7}
積集合: {3, 4, 5}
差集合: {1, 2}
対称差集合: {1, 2, 6, 7}
解答の手順:
- 和集合: 2つの集合のすべての要素を結合するために、
|
またはunion()
メソッドを使用します。union_result = A.union(B)
- 積集合: 2つの集合に共通する要素を取り出すために、
&
またはintersection()
メソッドを使用します。intersection_result = A.intersection(B)
- 差集合: AにあってBにない要素を取り出すために、“ または
difference()
メソッドを使用します。difference_result = A.difference(B)
- 対称差集合: AとBのどちらか一方にのみ存在する要素を取り出すために、
^
またはsymmetric_difference()
メソッドを使用します。symmetric_difference_result = A.symmetric_difference(B)
解答:
A = {1, 2, 3, 4, 5}
B = {3, 4, 5, 6, 7}
# 和集合
union_result = A.union(B)
print("和集合:", union_result)
# 積集合
intersection_result = A.intersection(B)
print("積集合:", intersection_result)
# 差集合
difference_result = A.difference(B)
print("差集合:", difference_result)
# 対称差集合
symmetric_difference_result = A.symmetric_difference(B)
print("対称差集合:", symmetric_difference_result)
3.2. 例題2:文字列の集合
2つの集合
A = {"apple", "banana", "cherry", "date", "elderberry"}
と B = {"cherry", "date", "fig", "grape", "banana"}
が与えられています。この2つの集合に対して以下の演算を行い、その結果を求めなさい。
- A と B の和集合
- A と B の積集合
- A と B の差集合(A – B)
- A と B の対称差集合
期待される出力:
和集合: {'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape'}
積集合: {'cherry', 'date', 'banana'}
差集合: {'apple', 'elderberry'}
対称差集合: {'apple', 'elderberry', 'fig', 'grape'}
解答の手順:
- 和集合: 2つの集合のすべての要素を結合するために、
|
またはunion()
メソッドを使用します。union_result = A | B
- 積集合: 2つの集合に共通する要素を取り出すために、
&
またはintersection()
メソッドを使用します。intersection_result = A & B
- 差集合: AにあってBにない要素を取り出すために、“ または
difference()
メソッドを使用します。difference_result = A - B
- 対称差集合: AとBのどちらか一方にのみ存在する要素を取り出すために、
^
またはsymmetric_difference()
メソッドを使用します。symmetric_difference_result = A ^ B
解答:
A = {"apple", "banana", "cherry", "date", "elderberry"}
B = {"cherry", "date", "fig", "grape", "banana"}
# 和集合
union_result = A | B
print("和集合:", union_result)
# 積集合
intersection_result = A & B
print("積集合:", intersection_result)
# 差集合
difference_result = A - B
print("差集合:", difference_result)
# 対称差集合
symmetric_difference_result = A ^ B
print("対称差集合:", symmetric_difference_result)
check
Pythonの基本から応用まで、幅広くカバーする記事を公開中です。学習のポイントや実践的なコード例を通じて、Pythonの魅力と実用性を深く理解することができます。ぜひ、こちらの記事で気になる記事を見つけてください!
PR