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

Pythonでマトリックス内の次に近い要素を見つけるプログラム

マトリックス(二次元リスト)内で、指定した位置から「次に近い」要素を検索したい場合があります。このようなときは、リストを順番に走査しながら特定の条件を判定するメソッドを定義し、そのメソッドを呼び出して結果を表示するのが基本的なアプローチです。

ここでは、開始位置(行・列)と検索対象のキーを受け取り、その位置以降で最初に一致する要素のインデックスを返す関数を実装してみましょう。

サンプルコード

以下に具体的な実装例を示します。

def get_nearest_elem(my_list, x, y, my_key):
    for index, row in enumerate(my_list[x:]):
        for j, elem in enumerate(row):
            if elem == my_key and j > y:
                return index + x, j

    return -1, -1

my_list = [[21, 32, 11, 22, 13], [91, 52, 31, 26, 33], [81, 52, 3, 22, 3], [11, 92, 83, 4, 9]]

print("The list is :")
print(my_list)

i, j = 1, 3
my_key = 3

my_res_abs, my_res_ord = get_nearest_elem(my_list, i, j, my_key)

print("The found K index is :")
print(my_res_abs, my_res_ord)

出力結果

The list is :
[[21, 32, 11, 22, 13], [91, 52, 31, 26, 33], [81, 52, 3, 22, 3], [11, 92, 83, 4, 9]]
The found K index is :
2, 4

コードの解説

  • get_nearest_elem という名前のメソッドを定義します。このメソッドは、リスト、キー、そして2つの整数(開始位置の行番号 x と列番号 y)を引数として受け取ります。

  • enumerate を使ってリストを反復処理し、要素がキーと一致し、かつ列番号が y より大きい場合に、その位置(行インデックスに x を加算した値と列インデックス)をタプルとして返します。

  • 条件に一致する要素が見つからなかった場合は、-1, -1 を返して「見つからなかったこと」を示します。

  • メソッドの外側では、リストのリスト(ネストされたリスト=マトリックス)を定義し、コンソールに表示します。

  • 検索の開始位置となる2つの整数(i = 1, j = 3)と、検索対象のキー値(3)を定義します。

  • 必要なパラメータを渡してメソッドを呼び出し、戻り値を行インデックスと列インデックスとして受け取ります。

  • 最後に、検索結果をコンソールに出力します。この例では、位置 (1, 3) 以降で最初に現れる 3 の位置として (2, 4) が返されています。

このように、スライスと enumerate を組み合わせることで、マトリックス内の任意の位置以降にある要素を効率的に検索できます。条件分岐を工夫すれば、「指定位置より後ろ」という制約を変更したり、複数の候補をすべて取得したりすることも簡単に応用できます。

  1. Pythonで配列内の最大の要素を見つける方法を解説

    この記事では、「配列の中から最大の要素を求める」という問題の解決方法について詳しく解説します。 問題の概要 問題文:与えられた配列に対して、その中で最も大きい要素を計算して求める必要があります。 ここではブルートフォース(総当たり)アプローチを使用します。これは、配列全体を先頭から順番に走査しながら各要素を比較し、その時点での最大値を更新していくというシンプルかつ確実な手法です。 実装例 以下に具体的なコードを示します。 # 最大値を求める関数 def largest(arr, n): # 最大要素の初期値として最初の要素を設定 max = arr[0] # 配列全体を

  2. Pythonで行列の転置を求めるプログラム

    この記事では、与えられた問題に対する解法とアプローチについて詳しく解説します。 問題文 ある行列が与えられたとき、その転置を同じ行列に格納し、結果を表示する必要があります。 行列の転置とは、行を列に、列を行に入れ替えたものです。言い換えれば、行列Aの転置は、要素A[i][j]をA[j][i]と入れ替えることで得られます。 実装例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): A[i][j], A[j][i] = A[j][i], A[i][j] # ドライ