Python – すべての行に別の行列との共通要素が含まれているかどうかを判定する方法
Pythonにおいて、ある行列(リストのリスト)のすべての行に、別の行列との共通要素が含まれているかどうかを確認したいケースは少なくありません。このような場合、シンプルな反復処理とフラグ変数を組み合わせることで、効率的に判定することができます。
サンプルコード
以下に具体的な実装例を示します。
my_list_1 = [[3, 16, 1], [2, 4], [4, 31, 31]]
my_list_2 = [[42, 16, 12], [42, 8, 12], [31, 7, 10]]
print("最初のリスト:")
print(my_list_1)
print("2番目のリスト:")
print(my_list_2)
my_result = True
for idx in range(0, len(my_list_1)):
temp = False
for element in my_list_1[idx]:
if element in my_list_2[idx]:
temp = True
break
if not temp:
my_result = False
break
if(temp == True):
print("2つの行列には共通要素が含まれています")
else:
print("2つの行列には共通要素が含まれていません")
出力結果
最初のリスト: [[3, 16, 1], [2, 4], [4, 31, 31]] 2番目のリスト: [[42, 16, 12], [42, 8, 12], [31, 7, 10]] 2つの行列には共通要素が含まれていません
コードの解説
まず、2つのネストされたリスト(リストのリスト)を定義し、コンソールに表示します。
結果を格納するための変数を、ブール値「True」で初期化します。
最初のリストを反復処理し、各行ごとに一時変数をブール値「False」に設定します。
行内の各要素について、それが2番目のリストの同じインデックスの行に存在するかどうかを確認します。存在する場合は、一時変数を「True」に設定し、内側のループを抜けます。
一時変数が「False」のままの場合(つまり、その行に共通要素が1つも見つからなかった場合)、結果変数を「False」に更新し、外側のループも直ちに終了します。
最後に、結果変数の値に基づいて、対応するメッセージをコンソールに出力します。
補足:all() と any() を使ったより簡潔な書き方
Pythonの組み込み関数である all() と any() を活用すると、同じ処理をさらに簡潔に記述できます。
my_result = all(
any(element in my_list_2[idx] for element in row)
for idx, row in enumerate(my_list_1)
)
print(my_result) # False
この方法では、明示的なフラグ変数や break 文が不要になり、コードの意図がより明確で読みやすくなります。条件式が複雑になる場合や、可読性を重視したい場合におすすめのアプローチです。
-
Pythonで行列の全行に共通する要素を効率的に見つける方法
問題の概要 m × m の正方行列が与えられたとき、すべての行に共通して現れる重複しない要素をすべて抽出することを考えます。 たとえば、次のような入力が与えられたとしましょう。 13215417 1532436 15215412 1526432 21942215 この場合、すべての行に共通して含まれる要素は 2、4、15 の3つであるため、出力は [2, 4, 15] となります。 解決のためのアプローチ この問題は、マージソートの「マージ処理」に似た発想で効率的に解くことができます。ポイントは、各行をあらかじめソートしておき、ポインタを進めながら共通要素を探すことです。具体的な手順
-
【Python入門】2つのリストに共通する要素があるかどうかを判定する方法
Pythonでリストを使ってデータを扱っていると、「2つのリストはまったく別のものなのか、それとも何らかの共通要素を持っているのか」を確認したい場面によく出会います。本記事では、その判定を実現するための代表的な2つのアプローチを、サンプルコードとともにわかりやすく解説します。方法1:in演算子を使った判定forループの中では、in句を使うことで「ある要素がリスト内に存在するかどうか」を簡単にチェックできます。この仕組みを応用し、1つ目のリストから要素を取り出して、それが2つ目のリストにも存在するかを確認することで、共通要素の有無を判定できます。具体的には、ネストしたforループ(二重ループ)を