Pythonのset()とfrozenset(): 集合と不変集合の理解と活用
Pythonには、集合(set)と不変集合(frozenset)という2つのデータ型があります。これらは重複を許さず、順序がない要素のコレクションを表現するためのもので、特に集合演算や重複の排除に優れています。この記事では、set()
とfrozenset()
について、それぞれの基本的な特性や具体的な活用方法について解説します。
はじめに
Pythonのset
は、数学における集合と同様に、重複する要素を持たず、順序がない可変のデータ型です。一方で、frozenset
は不変の集合で、変更できない特性があります。
set()の基本的な使い方
集合の作成
# setの作成 fruits = {"apple", "banana", "orange"} # 空のsetの作成 empty_set = set() # リストからsetを作成 numbers = [1, 2, 3, 4, 5] set_from_list = set(numbers)
要素の追加と削除
# 要素の追加 fruits.add("grape") # 要素の削除 fruits.remove("banana")
集合演算
set1 = {1, 2, 3, 4, 5} set2 = {3, 4, 5, 6, 7} # 和集合 union_set = set1 | set2 # 積集合 intersection_set = set1 & set2 # 差集合 difference_set = set1 - set2
frozenset()の特徴と使いどころ
frozenset
は不変(immutable)な集合であり、要素を追加・削除できません。そのため、辞書のキーとして使用できます。
不変性の確認
frozen_numbers = frozenset([1, 2, 3, 4, 5]) # 要素の追加は不可 # frozen_numbers.add(6) # エラー
辞書のキーとしての利用
# frozensetを辞書のキーとして使用 state_population = {frozenset(["New York", "New Jersey"]): 20000000, frozenset(["California", "Nevada"]): 30000000}
set()とfrozenset()の選択基準
set()
は可変で、要素の追加・削除が可能。集合演算を活用する際や可変なデータが必要な場合に適しています。frozenset()
は不変で、辞書のキーとして使用できるなどの特長があります。変更されてはいけないデータや、辞書のキーとして使用する場合に適しています。
まとめ
set()
とfrozenset()
は、重複を許さず、順序がない集合を表現するためのデータ型です。set()
は可変であり、集合演算などを柔軟に行えます。一方で、frozenset()
は不変であり、変更が許されない場面で活用できます。どちらを選択するかは、具体的なユースケースや要件によります。しっかりと使い分けて、効果的に集合を操作しましょう。