Pythonでは、セットと呼ばれるデータ型を使うことで、非重複の要素を管理したり、相互関係を要素の集合として操作することができます。例えば、データベースの重複レコードの除去や、ウェブアプリケーションでのタグ管理、ユーザーの共通の興味を見つけるといった場面で活用されます。本記事では、Pythonのセット操作について基本的な使い方から実践的な導入例まで解説します。
セットの基本
セットは、重複しない要素の集合を表します。これはリストやタプルとは異なり、同じ要素を複数含むことができません。下記はセットの基本的な作成方法の例です。
s = set(['u', 'd', 'ud', 'du', 'd', 'du'])
print(s)
結果
{'d', 'du', 'u', 'ud'}
重複した要素は自動的に除去されます。
セットの相互操作
セットは、相互操作を簡単に実行できることが特徴です。これにより、大規模なデータセット間での高速なデータ検索や、効率的なデータ分析が可能になります。下記の例では、集合操作を行います。
合集 (Union)
t = set(['d', 'dd', 'uu', 'u'])
print(s.union(t))
結果:
{'d', 'dd', 'du', 'u', 'ud', 'uu'}
合集操作は、二つのセットの要素をすべて含むセットを作成します。
交集 (Intersection)
print(s.intersection(t))
結果:
{'d', 'u'}
交集操作は、両方のセットに共通する要素のみを含むセットを作成します。
差集 (Difference)
print(t.difference(s))
結果:
{'dd', 'uu'}
差集操作は、片方のセットにあるが、もう片方にはない要素のみを含むセットを作成します。
差分集 (Symmetric Difference)
print(s.symmetric_difference(t))
結果:
{'dd', 'du', 'ud', 'uu'}
対称差(symmetric difference)操作は、両方のセットに共通しない要素を一つのセットにまとめます。
セットの実践例: 重複要素の除去
リストから重複要素を除去するためにセットを使うことができます。下記の例では、重複しないリストを作成します。なお、セットを使用すると順序が保持されないため、元のリストの順序を保持したい場合は、以下のように順序を維持する方法もあります。
unique_ordered_list = list(dict.fromkeys(l))
この方法では、辞書のキーとしてリストの要素を保持することで順序を維持しつつ重複を除去できます。
from random import randint
l = [randint(0, 10) for i in range(1000)]
# 1000個の乱数を生成
print(len(l))
結果:
1000
これをセットに変換すると、重複要素が自動的に除去されます。
unique_elements = set(l)
print(len(unique_elements))
まとめ
Pythonのセットは、重複要素を含むデータを簡単に変換したり、集合操作を実行したりすることができます。ただし、セットは順序を保持しないため、データの順序が重要な場合には適していません。また、ミュータブル(可変)のデータ型、例えばリストや辞書などをセットの要素として使用することはできません。この機能を活用して、さまざまな実践問題に対応しましょう。