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

Pythonで最大行要素を基準に行列を並べ替える方法

Pythonでは、行列(リストのリスト)を「各行の最大値」を基準にして並べ替えることができます。この記事では、max関数とsortメソッドを組み合わせて、行ごとの最大要素に従って行列を降順にソートする方法を解説します。

実装例

以下は、最大行要素を基準に行列を並べ替えるサンプルコードです。

def sort_max(row):
    return max(row)

my_list = [[15, 27, 18], [39, 20, 13], [13, 15, 56], [43, 13, 25]]

print("リストの内容:")
print(my_list)

my_list.sort(key=sort_max, reverse=True)

print("並べ替え後の結果:")
print(my_list)

出力結果

リストの内容:
[[15, 27, 18], [39, 20, 13], [13, 15, 56], [43, 13, 25]]
並べ替え後の結果:
[[13, 15, 56], [43, 13, 25], [39, 20, 13], [15, 27, 18]]

コードの解説

  • sort_maxという名前の関数を定義します。この関数は引数として1つの行を受け取り、その行の中で最も大きい要素をmax関数によって返します。

  • 関数の外側で、複数のリストを含む入れ子のリスト(行列)を定義し、コンソールに表示します。

  • sortメソッドを使用してリストを並べ替えます。このとき、key引数に先ほど定義したsort_max関数を指定することで、「各行の最大値」が比較基準となります。

  • さらに、reverseパラメータをTrueに設定しているため、リストは降順(最大値が大きい行から順に)並べ替えられます。

  • その結果、各行の最大値(18、39、56、43)に基づいて、[[13, 15, 56]] → [[43, 13, 25]] → [[39, 20, 13]] → [[15, 27, 18]] の順に出力されます。

lambdaを使った簡潔な書き方

別途関数を定義せず、lambda式を使えば同じ処理をより簡潔に記述できます。

my_list = [[15, 27, 18], [39, 20, 13], [13, 15, 56], [43, 13, 25]]

my_list.sort(key=lambda row: max(row), reverse=True)

print(my_list)
# [[13, 15, 56], [43, 13, 25], [39, 20, 13], [15, 27, 18]]

このように、key引数には任意の関数を渡せるため、行の合計値や平均値など、他の基準でも同様に並べ替えが可能です。状況に応じて使い分けるとよいでしょう。

  1. Pythonで行列の各列を昇順にソートする方法を解説

    問題の概要 行列が与えられたとき、それぞれの列を昇順(小さい順)に並べ替えるという問題を考えます。行ごとではなく、列単位でソートするのがポイントです。 例えば、次のような行列が入力されたとします。 1121316641118 この場合、出力は次のようになります。 1646118112131 1列目は 11, 6, 1 が 1, 6, 11 に、2列目は 21, 6, 11 が 6, 11, 21 に、3列目は 31, 4, 8 が 4, 8, 31 に、それぞれ昇順に並べ替えられていることが分かります。 解き方のアルゴリズム この問題は、次の手順で解くことができます。 R := 行列の行数

  2. Pythonのmap関数で1が最も多い行を検索する方法

    このチュートリアルでは、Pythonのmap関数を使って、行列(2次元リスト)の中から「1」の数が最も多い行を見つけるプログラムを作成します。 まず、次のような行列を例に考えてみましょう。 matrix = [ [0, 0, 1], [1, 1, 1], [1, 1, 0] ] プログラムの書き方はさまざまありますが、ここではmap関数を活用し、以下の手順で実装していきます。 行列を初期化する map関数を使って各行に含まれる「1」の個数を求め、リストに格納する リストの中から最大値(およびそのインデックス)を出力する サンプルコード ## 行列の初期化 matr