Python-セット

数学的には、セットは特定の順序ではないアイテムのコレクションです。Pythonセットは、以下の追加条件を備えたこの数学的定義に似ています。

  • セット内の要素を複製することはできません。
  • セット内の要素は不変です(変更できません)が、セット全体は変更可能です。
  • Pythonセットのどの要素にもインデックスが付加されていません。したがって、インデックス作成やスライス操作はサポートされていません。

セット操作

Pythonのセットは通常、和集合、共通部分、差、補集合などの数学演算に使用されます。以下に示すように、セットを作成してその要素にアクセスし、これらの数学演算を実行できます。

セットの作成

セットは、set()関数を使用するか、すべての要素を中括弧のペア内に配置することによって作成されます。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
Months={"Jan","Feb","Mar"}
Dates={21,22,17}
print(Days)
print(Months)
print(Dates)

上記のコードを実行すると、次のような結果になります。結果で要素の順序がどのように変更されたかに注意してください。

set(['Wed', 'Sun', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])
set(['Jan', 'Mar', 'Feb'])
set([17, 21, 22])

セット内の値へのアクセス

セット内の個々の値にアクセスすることはできません。上記のように、すべての要素に一緒にアクセスすることしかできません。ただし、セットをループすることで、個々の要素のリストを取得することもできます。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
 
for d in Days:
	print(d)

上記のコードを実行すると、次のような結果になります。

Wed
Sun
Fri
Tue
Mon
Thu
Sat

セットへのアイテムの追加

add()メソッドを使用して、セットに要素を追加できます。ここでも説明したように、新しく追加された要素に関連付けられた特定のインデックスはありません。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat"])
 
Days.add("Sun")
print(Days)

上記のコードを実行すると、次のような結果になります。

set(['Wed', 'Sun', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])

セットからのアイテムの削除

Discard()メソッドを使用して、セットから要素を削除できます。ここでも説明したように、新しく追加された要素に関連付けられた特定のインデックスはありません。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat"])
 
Days.discard("Sun")
print(Days)

上記のコードを実行すると、次のような結果になります。

set(['Wed', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])

セットの連合

2つのセットの和集合演算は、両方のセットからのすべての異なる要素を含む新しいセットを生成します。以下の例では、要素「水」が両方のセットに存在します。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA|DaysB
print(AllDays)

上記のコードを実行すると、次のような結果になります。結果には「水」が1つしかないことに注意してください。

set(['Wed', 'Fri', 'Tue', 'Mon', 'Thu', 'Sat'])

セットの共通部分

2つのセットの共通部分操作により、両方のセットの共通要素のみを含む新しいセットが生成されます。以下の例では、要素「水」が両方のセットに存在します。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA & DaysB
print(AllDays)

上記のコードを実行すると、次のような結果になります。結果には「水」が1つしかないことに注意してください。

set(['Wed'])

セットの違い

2つのセットの差分演算は、最初のセットの要素のみを含み、2番目のセットの要素を含まない新しいセットを生成します。以下の例では、要素「Wed」が両方のセットに存在するため、結果セットには含まれません。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA - DaysB
print(AllDays)

上記のコードを実行すると、次のような結果になります。結果には「水」が1つしかないことに注意してください。

set(['Mon', 'Tue'])

セットの比較

特定のセットが別のセットのサブセットまたはスーパーセットであるかどうかを確認できます。結果は、セットに存在する要素に応じてTrueまたはFalseになります。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
SubsetRes = DaysA <= DaysB
SupersetRes = DaysB >= DaysA
print(SubsetRes)
print(SupersetRes)

上記のコードを実行すると、次のような結果になります。

True
True