Pythonで2つのリストの共通要素を求めるプログラム(積集合の計算方法)
リストの共通部分(Intersection/積集合)とは、2つのリストに共通して含まれるすべての要素を取り出し、それらを別の3つ目のリストに格納する操作のことです。
List1::[1,2,3] List2::[2,3,6] List3::[2,3]
上記の例では、List1とList2の両方に存在する「2」と「3」が抽出され、List3に格納されています。
アルゴリズム
ステップ1:リストを入力する。 ステップ2:まず1つ目のリストの全要素を走査し、2つ目のリストの各要素と照合する。 ステップ3:要素が一致した場合、その値を3つ目のリストに格納する。
サンプルコード
# 2つのリストの共通部分(積集合)を求める
def intertwolist(A, B):
C = [i for i in A if i in B]
return C
# ドライバーコード
A=list()
B=list()
n=int(input("リストのサイズを入力してください ::"))
print("1つ目のリストの要素を入力してください::")
for i in range(int(n)):
k=int(input(""))
A.append(k)
print("2つ目のリストの要素を入力してください::")
for i in range(int(n)):
k=int(input(""))
B.append(k)
print("最終的なリスト ::>",intertwolist(A, B))
このコードでは、リスト内包表記を使うことで処理がとてもシンプルになります。[i for i in A if i in B] の部分が、「リストAの要素のうち、リストBにも存在するものだけを取り出す」という共通部分の計算を実現しています。
実行結果
リストのサイズを入力してください ::5 1つ目のリストの要素を入力してください:: 12 23 45 67 11 2つ目のリストの要素を入力してください:: 23 45 88 11 22 最終的なリスト ::> [23, 45, 11]
このように、2つのリストに入力された値のうち、共通して含まれる「23」「45」「11」だけが出力されました。
補足:set(集合)を使ったより簡単な方法
重複しないデータであれば、set型を利用するとさらに短く書くことができます。
A = [12, 23, 45, 67, 11] B = [23, 45, 88, 11, 22] result = list(set(A) & set(B)) print(result)
出力例:[11, 23, 45]
set(A) & set(B) は集合演算の「AND(積集合)」を意味します。ただしsetは順序を持たないため、結果の並び順は元のリストと異なる場合がある点に注意してください。順序を維持したい場合は、冒頭で紹介したリスト内包表記の方法が適しています。
-
Pythonでリストの累積和(累積合計)を求める方法
この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:
-
3つのソート済み配列から共通要素を見つけるPythonプログラムの書き方
この記事では、Pythonを使って3つのソート済み配列(リスト)に共通して含まれる要素を効率的に見つける方法を解説します。 基本的な流れは以下のとおりです。まず、ユーザーが入力した3つの未ソートのリストを用意し、それぞれをsorted()関数で昇順に並べ替えます。その後、各リストの先頭から同時に走査を行い、3つのリストの現在位置にある要素がすべて一致するかどうかを確認します。一致していればその要素を出力し、一致していなければ最も小さい値を持つインデックスを進めて次の要素へ移動します。 処理の概要 配列のサイズをそれぞれ n1、n2、n3 とし、各配列の走査位置を示すインデックスを i = 0、