【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()関数を利用した効率的な手法を紹介しました。特にデータ量が多い場合は、セットを使った方法の方が処理速度の面で有利です。用途に応じて使い分けてみてください。
-
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
-
【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の組