【Python】セット(set)のintersectionメソッドで3つのリストから共通要素を抽出する方法
ユーザーが入力した3つのリストの中から、すべてのリストに共通して含まれる要素を取り出すのが、本記事で紹介するプログラムの目的です。ここでは、Pythonの集合型「セット(set)」が持つintersection(積集合)メソッドを活用します。
実行例
入力 A=[2, 3, 4, 5, 6] B=[2, 3, 7, 6, 90] C=[2, 3, 45, 34] 共通要素=[2, 3]
アルゴリズム
ステップ1:3つのリストの要素を入力します。 ステップ2:intersectionメソッドを使用します。まず各リストをセットに変換し、2つのセットの積集合を求めて共通要素を特定します。その後、その結果を3つ目のセットとも交差させます。
サンプルコード
def common_ele(my_A, my_B, my_C):
my_s1 = set(my_A)
my_s2 = set(my_B)
my_s3 = set(my_C)
my_set1 = my_s1.intersection(my_s2)
output_set = my_set1.intersection(my_s3)
output_list = list(output_set)
print(output_list)
if __name__ == '__main__':
# 1つ目のリスト
A = list()
n = int(input("リストのサイズを入力してください"))
print("数値を入力してください")
for i in range(int(n)):
p = int(input("サイズ="))
A.append(int(p))
print(A)
# 2つ目のリスト
B = list()
n1 = int(input("リストのサイズを入力してください"))
print("数値を入力してください")
for i in range(int(n1)):
p = int(input("サイズ="))
B.append(int(p))
print(B)
# 3つ目のリスト
C = list()
n2 = int(input("リストのサイズを入力してください"))
print("数値を入力してください")
for i in range(int(n2)):
p = int(input("サイズ="))
C.append(int(p))
print(C)
# 関数の呼び出し
common_ele(A, B, C)
出力
リストのサイズを入力してください 3 数値を入力してください サイズ= 2 [2] サイズ= 1 [2, 1] サイズ= 2 [2, 1, 2] リストのサイズを入力してください 3 数値を入力してください サイズ= 2 [2] サイズ= 1 [2, 1] サイズ= 4 [2, 1, 4] リストのサイズを入力してください 4 数値を入力してください サイズ= 3 [3] サイズ= 2 [3, 2] サイズ= 1 [3, 2, 1] サイズ= 3 [3, 2, 1, 3] [1, 2]
コードのポイント
set()による変換:リストをセットに変換すると重複する要素が自動的に除去され、高速な集合演算が行えるようになります。
intersection()メソッド:2つのセットに共通して含まれる要素のみを持つ新しいセットを返します。まずAとBの共通要素を求め、さらにその結果とCの共通要素を求めることで、3つのリストすべてに存在する要素を効率よく抽出できます。
list()による復元:最終結果はセット型で得られるため、list()でリスト形式に戻して出力しています。
-
Pythonで二分木の最小共通祖先(LCA)を求めるアルゴリズムと実装例
はじめに二分木と2つの数値 a、b が与えられたとき、a と b を子孫として持つ最も深いノード(最小共通祖先:LCA)の値を求める問題を考えてみましょう。ここで重要なポイントは、「あるノードはそれ自身の子孫にもなり得る」という点です。つまり、片方のノードがもう片方の祖先である場合、そのノード自体が答えになります。例以下のような二分木を考えます。このとき、a = 6、b = 2 とすると、出力は 4 になります。値4のノードが、6と2の両方を子孫として持つ最も深いノードだからです。解法のアプローチこの問題は再帰を使って効率的に解くことができます。手順は以下の通りです。solve() メソッドを
-
3つのソート済み配列から共通要素を見つけるPythonプログラムの書き方
この記事では、Pythonを使って3つのソート済み配列(リスト)に共通して含まれる要素を効率的に見つける方法を解説します。 基本的な流れは以下のとおりです。まず、ユーザーが入力した3つの未ソートのリストを用意し、それぞれをsorted()関数で昇順に並べ替えます。その後、各リストの先頭から同時に走査を行い、3つのリストの現在位置にある要素がすべて一致するかどうかを確認します。一致していればその要素を出力し、一致していなければ最も小さい値を持つインデックスを進めて次の要素へ移動します。 処理の概要 配列のサイズをそれぞれ n1、n2、n3 とし、各配列の走査位置を示すインデックスを i = 0、