【Python】隣接要素の差の合計をキーにして行列(リストのリスト)をソートする方法
はじめに
本記事では、各行における隣接する要素同士の差の絶対値を合計し、その合計値をソートの基準として、行列(リストのリスト)を並べ替えるPythonプログラムを紹介します。sortメソッドのkey引数に関数を渡すテクニックが学べる実用的な例です。
サンプルコード
以下に実際の実装例を示します。
def diff_summation_elem(row):
return sum([abs(row[index + 1] - row[index]) for index in range(0, len(row) - 1)])
my_list = [[97, 6, 47, 3], [6, 88, 3, 26], [71, 53, 34, 65], [15, 36, 5,62]]
print("The list is : ")
print(my_list)
my_list.sort(key=diff_summation_elem)
print("The resultant list is :" )
print(my_list)出力
The list is : [[97, 6, 47, 3], [6, 88, 3, 26], [71, 53, 34, 65], [15, 36, 5, 62]] The resultant list is : [[71, 53, 34, 65], [15, 36, 5, 62], [97, 6, 47, 3], [6, 88, 3, 26]]
解説
まず、リストを引数として受け取る「diff_summation_elem」という名前の関数を定義します。
この関数では、リスト内包表記を使ってリストを走査しながら「abs」メソッドで隣接する2つの要素の差の絶対値を求め、「sum」メソッドでそれらをすべて合計して返します。
関数の外側では、リストのリスト(二次元リスト)を定義し、その内容をコンソールに表示します。
続いて、sortメソッドのkey引数に先ほど定義した関数を指定することで、各行の「差の合計値」に基づいてリスト全体を昇順にソートします。
最後に、並べ替え後のリストをコンソールに出力します。
計算の流れを確認してみよう
例えば最初の行 [71, 53, 34, 65] の場合、差の合計は次のように計算されます。
|53 − 71| + |34 − 53| + |65 − 34| = 18 + 19 + 31 = 68
同様に他の行も計算すると、[15, 36, 5, 62] は 109、[97, 6, 47, 3] は 176、[6, 88, 3, 26] は 190 となります。したがって、合計値が小さい順に 68 → 109 → 176 → 190 と並べ替えられ、出力結果と一致します。
まとめ
sortメソッドのkey引数に独自の関数を渡すことで、任意の基準による柔軟なソートが可能になります。今回のような「要素間の差の合計」以外にも、行の合計値や最大値など、さまざまな条件でソートできるので、ぜひ応用してみてください。
-
【Python】文字列の長さに基づいてリストを並べ替える方法
文字列のリストがあり、その長さを基準にリストを並べ替えたいとします。つまり、短い文字列から長い文字列へと昇順に整列させる必要があります。これを実現するには、独自のアルゴリズムを書くか、Pythonの組み込みメソッドであるsort()や関数sorted()を、キー(key)引数と組み合わせて使用するのが便利です。実行例まず、どのような動作になるのか例で確認しましょう。入力: strings = [hafeez, aslan, honey, appi] 出力: [appi, aslan, honey, hafeez]それでは、sorted(key)関数とsort(key)メソッドを使ったプログラム
-
要素の長さに基づいてリストをソートするPythonプログラム
この記事では、ユーザーが入力したリストを、各要素の長さ(文字数)に基づいてソートする方法を解説します。Pythonには標準で用意されている組み込み関数 sorted() を使うことで、シンプルなコードで実現できます。 例 入力::[mona,pp,aaa] それぞれの長さは [4,2,3] したがって、ソート後の並び順は [2,3,4] 出力::[pp,aaa,mona] アルゴリズム ステップ1: リストの要素を入力する。 ステップ2: sorted(A, key=len) 関数を適用する。 サンプルコード # リストをソートする def sortedlist(A): ne