Pythonで行列を行ごとの中央値を基準に並べ替える方法
リストのリスト(行列)を、各行の中央値を基準にして並べ替えたい場合があります。Pythonでは、標準ライブラリ statistics モジュールが提供する median 関数を利用したキー関数を定義することで、この処理を簡単に実現できます。
なお、中央値とはデータを昇順に並べたときに中央に位置する値のことで、外れ値の影響を受けにくい指標として知られています。
サンプルコード
from statistics import median
def median_row(row):
return median(row)
my_list = [[43, 14, 27], [13, 27, 24], [32, 56, 18], [34, 62, 55]]
print("元のリスト:")
print(my_list)
my_list.sort(key=median_row)
print("並べ替え後の結果:")
print(my_list)
実行結果
元のリスト: [[43, 14, 27], [13, 27, 24], [32, 56, 18], [34, 62, 55]] 並べ替え後の結果: [[13, 27, 24], [43, 14, 27], [32, 56, 18], [34, 62, 55]]
コードの解説
まず、中央値を計算するために
statisticsモジュールからmedian関数をインポートします。median_rowという名前の関数を定義します。この関数は1つの行(リスト)を引数として受け取り、median関数を使ってその行の中央値を戻り値として返します。入れ子になったリスト(行列)を定義し、コンソールに表示して元の状態を確認します。
sortメソッドを呼び出し、key引数に先ほど定義したmedian_row関数を指定します。これにより、各行の中央値を比較基準としてリスト全体が昇順に並べ替えられます。最後に、並べ替え後の結果をコンソールに出力します。
補足:sorted() を使う方法
元のリストを変更せずに、新しい並べ替え済みリストを作成したい場合は、組み込み関数 sorted() を使うこともできます。
sorted_list = sorted(my_list, key=median_row)
list.sort() はリスト自体を破壊的に変更するのに対し、sorted() は元のリストを保持したまま新しいリストを返すため、用途に応じて使い分けるとよいでしょう。
-
Pythonのcmp()関数とは?2つの整数を比較する方法をわかりやすく解説
cmp()関数とはcmp()は、2つの整数を比較するためのPython標準ライブラリの関数です。比較結果は以下の3パターンで返されます。最初の整数が2番目より小さい場合:-1最初の整数が2番目より大きい場合:1両者が等しい場合:0なお、組み込み関数のcmp()はPython 3で廃止されました。そのため本記事では、同じ挙動を再現する独自関数を定義し、その使い方を紹介します。実装は非常にシンプルで、PythonではTrueが1、Falseが0として扱われる性質を利用した「(x > y) - (x < y)」という式で実現できます。サンプルコード次の例では、x>y、x<y、
-
Pythonで3色の配列をソートする方法(オランダ国旗問題の解き方)
問題の概要 n個のオブジェクトを含む配列があるとします。各オブジェクトは赤・白・青のいずれかの色で塗られており、同じ色のオブジェクトが隣り合い、かつ赤→白→青の順に並ぶように、配列をインプレース(追加メモリを使わずに)ソートします。 ここでは、色を数値で表現し、赤=0、白=1、青=2 とします。例えば、配列が [2,0,2,1,1,0] の場合、出力は [0,0,1,1,2,2] となります。 この問題は「オランダ国旗問題」としても知られており、3つのポインタを使うことで1回の走査で効率的に解くことができます。 解法のステップ low を 0、mid を 0、high を 配列の長さ −