Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで2つのリストを結合する方法|最初のリストの重複を保持しながらマージする

Pythonを使ったデータ分析では、2つのリストを1つにまとめたい場面によく出会います。しかし、それぞれのリストに含まれる重複要素をどう扱うかは悩みどころです。本記事では、最初のリストの要素はそのまま(重複も含めて)保持しつつ、2番目のリストからはまだ存在しない要素だけを追加する方法を2通り紹介します。

方法1:extend() を使う

まず最初のリストをコピーして結果用のリストを作成します。続いて、2番目のリストの各要素について「結果リストに存在しないか」を判定し、存在しない要素だけを extend() で追加していきます。この方法では、元のリストの順序がそのまま保たれるのが特徴です。

コード例

# リストA
listA = ['A', 'B', 'B', 'X']

# リストB
listB = ['B', 'X', 'Z', 'P']

# 結果リストを作成(リストAのコピー)
res = list(listA)

# リストBのうち、resに存在しない要素だけを追加
res.extend(i for i in listB if i not in res)

# 結果を表示
print(res)

実行結果

['A', 'B', 'B', 'X', 'Z', 'P']

リストAの重複要素 'B' はそのまま残り、リストBからは新しく 'Z''P' のみが末尾に追加されていることがわかります。

方法2:set() を使う

set() 関数を使うと、リストから一意な要素だけを取り出せます。2つのリストをそれぞれ集合に変換し、差集合を求めることで「リストBにのみ存在する要素」を取得できます。最後に、その差分を元のリストAに連結します。

コード例

# 最初のリスト
listA = ['A', 'B', 'B', 'X']

# 2番目のリスト
listB = ['B', 'X', 'Z', 'P']

# 各リストを集合に変換して一意化
listA_uniq = set(listA)
listB_uniq = set(listB)

# リストBにのみ存在する要素を取得
diff_lists = listB_uniq - listA_uniq
res = listA + list(diff_lists)

# 結果を表示
print(res)

実行結果

['A', 'B', 'B', 'X', 'P', 'Z']

こちらの方法でもリストAの重複は保持されます。ただし、集合は順序を持たないため、追加される要素('P''Z')の並び順は実行ごとに変わる可能性がある点に注意してください。要素の順序を厳密に守りたい場合は、方法1の extend() を使うアプローチがおすすめです。

  1. Pythonでリストを定義する方法とは?基本の書き方を初心者向けに解説

    リスト(List)は、Pythonにおける基本的なシーケンス型データ構造の一つです。複数の要素を角括弧 [ ] で囲み、カンマで区切って表現します。各要素は文字列や数値など異なるデータ型が混在していても問題ありません。また、リストは順序付き(ordered)コレクションであるため、格納した要素の並び順は保持されます。個々の要素には、0から始まるインデックスを使ってアクセスできます。たとえば最初の要素はインデックス 0、2番目の要素は 1 で参照します。リストの定義例list1 = [physics, chemistry, 1997, 2000] list2 = [1, 2, 3, 4, 5]

  2. Pythonリスト入門:作成から操作、削除まで徹底解説

    このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧