【Python】2つ以上のリストの和集合(ユニオン)を求めるプログラム
「和集合(ユニオン)」とは、複数のリストに含まれるすべての要素を集め、1つの新しいリストにまとめる操作のことです。本記事では、Pythonを使って2つ以上のリストの和集合を求める方法を、初心者にもわかりやすく解説します。
List1::[1,2,3] List2::[4,5,6] List3::[1,2,3,4,5,6]
アルゴリズム
ステップ1:2つのリストを入力として受け取る。 ステップ2:「+」演算子を使ってリストを連結(結合)する。
方法1:「+」演算子でリストを連結する
Pythonでは「+」演算子を使うだけで、2つのリストを簡単に1つにまとめられます。以下のコードでは、まずリストのサイズを入力し、続けて各リストの要素を順番に入力していきます。
# 和集合(連結)の処理
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)
C = A + B
print("最終的なリストは ::>", C)
実行結果
リストのサイズを入力してください ::4 1つ目のリストの要素を入力してください:: 23 11 22 33 2つ目のリストの要素を入力してください:: 33 22 67 45 最終的なリストは ::> [23, 11, 22, 33, 33, 22, 67, 45]
出力結果を見ると、元のリストに含まれていた重複した要素(33や22など)がそのまま残っていることがわかります。「+」演算子は単純な連結を行うため、重複は自動的には除去されません。
方法2:set()を使って重複を除いた真の和集合を求める
数学的な意味での「和集合」、つまり重複する要素を1つだけ残したい場合は、set()(集合型)を利用します。集合は重複した要素を持たないため、リストを集合に変換してから「|」演算子または union() メソッドで結合すると、重複が自動的に除去されます。
# 重複を除いた和集合
A = [23, 11, 22, 33]
B = [33, 22, 67, 45]
# 「|」演算子を使う方法
C = list(set(A) | set(B))
print("重複を除いたリスト ::>", C)
# union() メソッドを使う方法
D = list(set(A).union(set(B)))
print("union() を使った結果 ::>", D)
実行結果
重複を除いたリスト ::> [67, 11, 45, 22, 23, 33] union() を使った結果 ::> [67, 11, 45, 22, 23, 33]
なお、集合は要素の順序を保持しないため、出力される順番は元のリストとは異なる場合があります。順序を維持しながら重複だけを除去したい場合は、以下のように dict.fromkeys() を使う方法も便利です。
# 順序を保ちながら重複を除去
C = list(dict.fromkeys(A + B))
print("順序を保持したリスト ::>", C)
# 出力例: [23, 11, 22, 33, 67, 45]
まとめ
- 単純に2つのリストをつなげたい場合は「+」演算子を使う。
- 重複を除いた数学的な和集合が欲しい場合は
set()と「|」演算子(またはunion()メソッド)を使う。 - 順序を維持しつつ重複を除きたい場合は
dict.fromkeys()が便利。
-
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、