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

【Python入門】2つのリストに共通する要素があるかどうかを判定する方法

Pythonでリストを使ってデータを扱っていると、「2つのリストはまったく別のものなのか、それとも何らかの共通要素を持っているのか」を確認したい場面によく出会います。本記事では、その判定を実現するための代表的な2つのアプローチを、サンプルコードとともにわかりやすく解説します。

方法1:in演算子を使った判定

forループの中では、in句を使うことで「ある要素がリスト内に存在するかどうか」を簡単にチェックできます。この仕組みを応用し、1つ目のリストから要素を取り出して、それが2つ目のリストにも存在するかを確認することで、共通要素の有無を判定できます。具体的には、ネストしたforループ(二重ループ)を用いて実装します。

サンプルコード

# リストの宣言
list1=['a',4,'%','d','e']
list2=[3,'f',6,'d','e',3]
list3=[12,3,12,15,14,15,17]
list4=[12,42,41,12,41,12]

# 2つのリストに共通要素があるかチェックする関数
def commonelems(x,y):
    common=0
    for value in x:
        if value in y:
            common=1
    if(not common):
        return ("The lists have no common elements")
    else:
        return ("The lists have common elements")

# 各リスト同士を比較
print("Comparing list1 and list2:")
print(commonelems(list1,list2))
print("\n")
print("Comparing list1 and list3:")
print(commonelems(list1,list3))
print("\n")
print("Comparing list3 and list4:")
print(commonelems(list3,list4))

上記のコードを実行すると、次のような結果が出力されます。

実行結果

Comparing list1 and list2:
The lists have common elements
Comparing list1 and list3:
The lists have no common elements
Comparing list3 and list4:
The lists have common elements

方法2:セット(set)を使った判定

もうひとつの有効なアプローチが、セット(集合型)を活用する方法です。セットは「重複しない要素の順序なしコレクション」という特性を持ちます。そこで、2つのリストをそれぞれセットに変換し、&演算子(積集合)で共通部分を求めます。もし両者に共通要素が存在すれば、結果として得られるセットは空にはなりません。

また、any()関数とジェネレータ式を組み合わせれば、より簡潔に共通要素の有無を判定することも可能です。

サンプルコード

list1=['a',4,'%','d','e']
list2=[3,'f',6,'d','e',3]

# リストをセットに変換して共通要素をチェックする関数
def commonelem_set(z, x):
    one = set(z)
    two = set(x)
    if (one & two):
        return ("There are common elements in both lists:", one & two)
    else:
        return ("There are no common elements")

# 共通要素のチェック
z = commonelem_set(list1, list2)
print(z)

def commonelem_any(a, b):
    out = any(check in a for check in b)

    # 条件の判定
    if out:
        return ("The lists have common elements.")
    else:
        return ("The lists do not have common elements.")

print(commonelem_any(list1, list2))

上記のコードを実行すると、次のような結果が出力されます。

実行結果

('There are common elements in both lists:', {'d', 'e'})
The lists have common elements.

まとめ

2つのリストの共通要素を判定する方法として、in演算子+ネストしたforループによるシンプルな手法と、セットの積集合やany()関数を利用した効率的な手法を紹介しました。特にデータ量が多い場合は、セットを使った方法の方が処理速度の面で有利です。用途に応じて使い分けてみてください。

  1. Python Pandas – 要素がInterval(区間)に含まれているかどうかを確認する方法

    PythonのPandasでは、ある要素がInterval(区間)に属しているかどうかを簡単に確認できます。そのためには、in演算子を使用します。まずは、必要なライブラリをインポートしましょう。import pandas as pdInterval(区間)の作成pd.Interval()を使って、左端が0、右端が10の区間を作成します。デフォルトでは右側が閉じた区間(right=True)になるため、範囲は「0より大きく10以下」となります。interval = pd.Interval(left=0, right=10)区間の表示作成した区間をprint文で表示してみましょう。print(In

  2. 【Python】グラフ内の2つのノードに共通して到達可能なノードが存在するかを判定するプログラム

    問題概要 有向グラフのエッジリストが与えられます。グラフは n 個のノードから構成され、ノード名は 0 から n-1 までです。さらに、2つの整数値 a と b が与えられます。ここで、「あるノード c から a への経路と、c から b への経路がどちらも存在する」という条件を満たすノード c が存在するかどうかを判定するのが課題です。 例として、下図のようなグラフを考えてみましょう。 a = 2、b = 3 の場合、出力は True になります。これは c = 0 とおくと、0 から 2 への経路と 0 から 3 への経路がどちらも存在するためです。 解法の考え方:逆グラフとDFSの組