集合計算
今回はPythonのリストの集合計算を勉強していきます。
リストの集合とは、例えば2つのリスト「A」、「B」があった際に「AとBの両方に含まれる要素」だったり、「Aだけに含まれる要素」を抽出することを言います。
まずは2つのリスト「A」、「B」でよく用いる5つのパターンを紹介しましょう。
積集合:AとBの両方に含まれる
まずはAとBの両方に含まれる集合で「積集合」と呼ばれる集合です。
AとBを丸で示した場合、重なっている部分のことです。
和集合:AまたはBに含まれる
次はAまたはBに含まれれる集合で「和集合」と呼ばれる集合です。
この場合はAとBの領域全てのことです。
差集合(対称差):AもしくはBのみに含まれる
最後はAもしくはBのみに含まれる「部分集合」と呼ばれる集合です。
この場合はAのみに含まれる場合、Bのみに含まれる場合の2パターンが存在します。
またAのみに含まれる、Bのみに含まれるの2つの集合を足した集合を「対称差」というらしいです。
今回はPythonのリストで上記の集合を取得するにはどうしたらいいのかを見ていきます。
Pythonのリストでの集合の扱い方
それではPythonでの集合の扱い方を見ていきましょう。
今回使用するリストはこちら。
A = [1, 3, 5, 7, 10]
B = [1, 2, 3, 4, 5]
AとBで共通するものは「1, 3, 5」です。
現状ではリストになっていますが、基本的には「set(リスト)」でSet型にしてから処理をし、「list(Set型)」でリスト型に戻します。
それでは始めていきましょう。
積集合
Pythonのリストで積集合を取得するには、それぞれのリストをSet型にしてから「&」で繋ぎます。
A = [1, 3, 5, 7, 10]
B = [1, 2, 3, 4, 5]
list_C = list(set(B) & set(A))
print(list_C)
実行結果
[1, 3, 5]
和集合
Pythonのリストで積集合を取得するには、それぞれのリストをSet型にしてから「|」で繋ぎます。
A = [1, 3, 5, 7, 10]
B = [1, 2, 3, 4, 5]
list_C = list(set(A) | set(B))
print(list_C)
実行結果
[1, 2, 3, 4, 5, 7, 10]
差集合:Aのみに含まれる or Bのみに含まれる
PythonのリストでAのみに含まれる、もしくはBのみに含まれる差集合を取得するには、それぞれのリストをSet型にしてから「-」で繋ぎます。
A = [1, 3, 5, 7, 10]
B = [1, 2, 3, 4, 5]
list_C = list(set(A) - set(B))
print(list_C)
実行結果
[10, 7]
A = [1, 3, 5, 7, 10]
B = [1, 2, 3, 4, 5]
list_C = list(set(B) - set(A))
print(list_C)
実行結果
[2, 4]
対称差:Aのみ、もしくはBのみに含まれる
PythonのリストでAのみ、もしくはBのみに含まれる対称差を取得するには、それぞれのリストをSet型にしてから「^」で繋ぎます。
A = [1, 3, 5, 7, 10]
B = [1, 2, 3, 4, 5]
list_C = list(set(B) ^ set(A))
print(list_C)
実行結果
[2, 4, 7, 10]
それぞれの集合を取得することができました。
ただ一体何に使うのだろうという方もいらっしゃるかもしれません。
今回この集合の取得の仕方を勉強したのは、Twitterのフォロー、フォロワーを取得した後、フォローされているのに自分がフォローしていない人や自分がフォローしているのに、フォローされていない人を抽出しようと思ったのが発端です。
最初はfor文を使って、一つずつ確認しようかと思ったのですが、これほど簡単に集合を取得できるとは結構驚きでした。
同じような人の役に立てば幸いです。
次回は今回せっかくSet型が出てきたので、Set型の扱いに関して勉強していきましょう。
ではでは今回はこんな感じで。
コメント