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

【Python】2つのリストから同じ要素を含まないペアを作成する方法

この記事では、Pythonを使って2つのリストからペアを作成する方法を解説します。ただし、単純な組み合わせではなく、「同じ値を持つ要素同士はペアにしない」という条件を満たす必要があります。初心者の方にもわかるよう、具体的な手順とサンプルコード付きで説明していきます。

解決の手順

問題を解決するための流れは以下の通りです。

  • まず、要素を含む2つのリストを用意します。
  • 両方のリストを反復処理し、対応する要素が異なる場合にのみペアをリストへ追加します。
  • 最後に結果を出力します。

方法1:リスト内包表記を使う

最もシンプルなのが、リスト内包表記で条件を指定する方法です。if i != j の条件により、値が等しい組み合わせを自動的に除外できます。以下のコードを見てみましょう。

# リストの初期化
list_1 = [1, 2, 3, 4, 5]
list_2 = [5, 8, 7, 1, 3, 6]

# 同じ要素を除外しながらペアを作成
result = [(i, j) for i in list_1 for j in list_2 if i != j]

# 結果の出力
print(result)

このコードを実行すると、次のような出力が得られます。

出力

[(1, 5), (1, 8), (1, 7), (1, 3), (1, 6), (2, 5), (2, 8), (2, 7), (2, 1), (2, 3), (2, 6), (3, 5), (3, 8), (3, 7), (3, 1), (3, 6), (4, 5), (4, 8), (4, 7), (4, 1), (4, 3), (4, 6), (5, 8), (5, 7), (5, 1), (5, 3), (5, 6)]

出力結果を見ると、(1, 1)(5, 5) のような同じ値のペアが含まれていないことが確認できます。

方法2:itertools.productを使う

標準ライブラリの itertools モジュールにも、便利な product メソッドが用意されています。これはすべての要素の直積(全組み合わせ)を生成するメソッドで、生成後に条件に合わないペアをフィルタリングする形になります。

# モジュールのインポート
import itertools

# リストの初期化
list_1 = [1, 2, 3, 4, 5]
list_2 = [5, 8, 7, 1, 3, 6]

# すべての組み合わせを生成
pairs = itertools.product(list_1, list_2)

# 同じ要素を含むペアを除外
result = [pair for pair in pairs if pair[0] != pair[1]]

# 結果の出力
print(result)

こちらを実行しても、出力は方法1とまったく同じになります。

出力

[(1, 5), (1, 8), (1, 7), (1, 3), (1, 6), (2, 5), (2, 8), (2, 7), (2, 1), (2, 3), (2, 6), (3, 5), (3, 8), (3, 7), (3, 1), (3, 6), (4, 5), (4, 8), (4, 7), (4, 1), (4, 3), (4, 6), (5, 8), (5, 7), (5, 1), (5, 3), (5, 6)]

まとめ

今回は、2つのリストから「同じ要素を含まないペア」を作成する2つの方法を紹介しました。リスト内包表記はコードが簡潔で読みやすく、小規模なデータに適しています。一方、itertools.product はイテレータとして動作するため、大きなデータセットを扱う場合でもメモリ効率に優れています。それぞれの特徴を理解し、目的やデータサイズに応じて使い分けるのがおすすめです。

  1. Pythonで2つの二分木の葉の並び(シーケンス)が同じかどうかを確認する方法

    はじめに2つの二分木が与えられたとき、それぞれの木を左から右へたどったときの葉ノードの並び(シーケンス)が一致しているかどうかを判定する問題を考えてみましょう。例えば、次のような2つの木が入力として与えられた場合を想定します。この場合、どちらの木も葉の並びは [2, 6] となるため、出力は True になります。解決のアプローチこの問題を解くためには、以下の手順に従います。結果を格納するための新しいリスト c を用意します。inorder() 関数を定義します。この関数はルートノードとリスト c を引数に取ります。c が null の場合は、新しい空のリストを作成します。ルートノードが nu

  2. Pythonで2つの異なるBST(二分探索木)から指定した合計値となるペアを検索する方法

    2つの二分探索木(BST)とある合計値が与えられたとき、その合計値に一致するペアを探します。ただし、各ペアの要素は異なるBSTに属している必要があります。例として、sum = 12 が与えられた場合を考えてみましょう。この場合、出力は [(6, 6), (7, 5), (9, 3)] となります。解法のアプローチこの問題は、以下の手順で効率的に解くことができます。各木を中順走査(in-order traversal)して、昇順にソートされたリストを作成します。1つ目のリストは先頭(最小値)から、2つ目のリストは末尾(最大値)から両端ポインタ方式で走査します。2つの要素の合計が目標値と等しければ