Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
セット.union() / セット.intersection() / セット.difference()
セットの集合演算(和集合・積集合・差集合・対称差集合)を行うメソッドと演算子です。数学の集合論と同じ操作をPythonで簡潔に記述できます。
構文
# 和集合(どちらかに含まれる要素) セット1.union(セット2) セット1 | セット2 # 積集合(両方に含まれる要素) セット1.intersection(セット2) セット1 & セット2 # 差集合(セット1にあってセット2にない要素) セット1.difference(セット2) セット1 - セット2 # 対称差集合(どちらか一方にだけ含まれる要素) セット1.symmetric_difference(セット2) セット1 ^ セット2
メソッド・演算子一覧
| メソッド / 演算子 | 概要 |
|---|---|
| セット1.union(セット2) / | | セット1とセット2の和集合(どちらかに含まれる全要素)を新しいセットとして返します。 |
| セット1.intersection(セット2) / & | セット1とセット2の積集合(両方に含まれる要素)を新しいセットとして返します。 |
| セット1.difference(セット2) / - | セット1からセット2の要素を除いた差集合を新しいセットとして返します。 |
| セット1.symmetric_difference(セット2) / ^ | どちらか一方にだけ含まれる対称差集合を新しいセットとして返します。 |
| セット1.intersection_update(セット2) / &= | セット1をセット2との積集合でインプレース更新します。 |
| セット1.difference_update(セット2) / -= | セット1からセット2の要素をインプレースで削除します。 |
サンプルコード
# 2つのセットを用意します。
python_users = {'田中', '佐藤', '鈴木', '山田'}
java_users = {'佐藤', '高橋', '山田', '渡辺'}
# 和集合:どちらかの言語を使うユーザー
print(python_users | java_users)
# 『{'田中', '佐藤', '鈴木', '山田', '高橋', '渡辺'}』と出力されます。
# 積集合:両方の言語を使うユーザー
print(python_users & java_users)
# 『{'佐藤', '山田'}』と出力されます。
# 差集合:Pythonだけ使うユーザー
print(python_users - java_users)
# 『{'田中', '鈴木'}』と出力されます。
# 対称差集合:どちらか一方だけのユーザー
print(python_users ^ java_users)
# 『{'田中', '鈴木', '高橋', '渡辺'}』と出力されます。
# メソッドでも同じ操作ができます。
union_set = python_users.union(java_users)
inter_set = python_users.intersection(java_users)
diff_set = python_users.difference(java_users)
# インプレース演算でセット自体を更新します。
python_users &= java_users
print(python_users) # 積集合の結果に更新されます。
# 複数のセットに対して一括で演算できます。
a = {1, 2, 3}
b = {2, 3, 4}
c = {3, 4, 5}
print(a & b & c) # 『{3}』と出力されます。
print(a | b | c) # 『{1, 2, 3, 4, 5}』と出力されます。
概要
セットの集合演算はメソッドと演算子のどちらでも実行できます。演算子(|, &, -, ^)の場合は両辺がセットである必要がありますが、メソッドの場合は引数にリストやタプルなどのイテラブルも渡せます。
集合演算はいずれも元のセットを変更せず、新しいセットを返します。元のセット自体を更新したい場合は『|=』『&=』『-=』『^=』などのインプレース演算子、またはそれに対応するメソッド(『update()』『intersection_update()』など)を使ってください。
差集合は順序に依存します。『A - B』と『B - A』は異なる結果になります。どちらにも含まれない要素を取得したい場合は対称差集合(^)を使ってください。
セットの包含関係の確認は『セット.issubset() / セット.issuperset() / セット.isdisjoint()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。