Python セット

Python には、データを整理するためのいくつかの組み込みデータ型が用意されています。これらの構造には、リスト、辞書、タプル、そして セット が含まれます。

Python 3 の ドキュメント より

セットは、重複する要素のない順序付けられていないコレクションです。基本的な用途には、メンバーシップのテストや重複エントリの削除があります。

より詳細な参照については、Python Sets: What, Why and How をお読みください。

セットの初期化

セットを作成するには、波括弧 {} を使用する方法と、組み込み関数 set() を使用する方法の 2 つがあります。

空のセット

セットを作成する際は、空の波括弧 {} を使用しないように注意してください。そうしないと、代わりに空の辞書になってしまいます。

# 波括弧または set() 関数を使用してセットを作成
s = {1, 2, 3}  # 波括弧を使用
s = set([1, 2, 3])  # set() コンストラクタを使用

# 警告:空の {} はセットではなく辞書を作成します
s = {}  # これはセットではなく辞書を作成します
type(s)  # <class 'dict'> を返します
<class 'dict'>

一意な要素の順序付けられていないコレクション

セットは重複する値を自動的に削除します。

# セットは重複を自動的に削除します
s = {1, 2, 3, 2, 3, 4}  # 重複は削除されます
s  # {1, 2, 3, 4} を返します
{1, 2, 3, 4}
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

重複する値を持つセットを作成するとどうなりますか?
A. 重複は自動的に削除されます
B. エラーが発生します
C. セットはすべての重複を保持します
D. 最初の出現のみが保持されます

そして、順序付けられていないデータ型であるため、インデックス指定はできません。

s = {1, 2, 3}
s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

set add と update

add() メソッドを使用して、セットに単一の要素を追加できます。

# add() メソッド:セットに単一の要素を追加します
s = {1, 2, 3}
s.add(4)  # 要素 4 を追加
s
{1, 2, 3, 4}

そして update() を使用すると、複数の要素を追加できます。

# update() メソッド:イテラブルから複数の要素を追加します
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6])  # 複数の要素を追加します (重複は無視されます)
s
{1, 2, 3, 4, 5, 6}

set remove と discard

どちらのメソッドもセットから要素を削除しますが、remove() は値が存在しない場合に key error を発生させます。

# remove() メソッド:要素を削除します。見つからない場合は KeyError を発生させます
s = {1, 2, 3}
s.remove(3)  # 要素 3 を削除
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 3

discard() はエラーを発生させません。

# discard() メソッド:要素を削除します。見つからなくてもエラーは発生しません
s = {1, 2, 3}
s.discard(3)  # 要素 3 を削除します (安全、欠落してもエラーなし)
s
{1, 2}
s.discard(3)
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

セットの remove() メソッドと discard() メソッドの違いは何ですか?
A. remove() は 1 つの要素を削除し、discard() はすべてを削除します
B. 違いはありません
C. remove() は要素が存在しない場合にエラーを発生させますが、discard() は発生させません
D. remove() の方が高速です

set union

union() または | は、提供されたセットのすべての要素を含む新しいセットを作成します。

# union(): 複数のセットからすべての要素を結合します (重複なし)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2)  # または 's1 | s2' - {1, 2, 3, 4, 5} を返します
{1, 2, 3, 4, 5}

set intersection

intersection() または & は、すべてのセットに共通する要素のみを含むセットを返します。

# intersection(): すべてのセットに共通する要素を返します
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3)  # または 's1 & s2 & s3' - {3} を返します
{3}
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

セットに対して intersection() は何を返しますか?
A. すべてのセットからのすべての要素
B. すべてのセットに共通する要素のみ
C. 最初のセットには存在するが、他のセットには存在しない要素
D. いずれかのセットには存在するが、両方には存在しない要素

set difference

difference() または - は、最初のセット(呼び出し元のセット)に固有の要素のみを返します。

# difference(): 最初のセットには存在するが、他のセットには存在しない要素を返します
s1 = {1, 2, 3}
s2 = {2, 3, 4}

s1.difference(s2)  # または 's1 - s2' - {1} を返します
{1}
s2.difference(s1) # または 's2 - s1'
{4}

set symmetric_difference

symmetric_difference() または ^ は、両者に共通しないすべての要素を返します。

# symmetric_difference(): いずれかのセットには存在するが、両方には存在しない要素を返します
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2)  # または 's1 ^ s2' - {1, 4} を返します
{1, 4}
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

2 つのセットに対して symmetric_difference() は何を返しますか?
A. 両方のセットからのすべての要素
B. 両方のセットに共通する要素のみ
C. 最初のセットには存在するが、2 番目のセットには存在しない要素
D. いずれかのセットには存在するが、両方のセットには存在しない要素

関連リンク