達成したいこと:2要素の情報を用いたソート
pythonのリストでは、例えばsorted()
を用いることで中身の要素をソートできます。また、sorted(リスト名, key=ソート時のキー)
とすることで、ソートの優先度を指定することができます。
ここでは、キーとして「2要素の情報」を使用する場合の書き方を取り上げます。
結論:cmp_to_keyの利用
cmp_to_key()
内部にラムダ関数を記載すればOKです。
例えば、[x,y]
(いずれも整数)を要素にもつリストに対して、y/x
をキーとしてソートするには、以下の通り書けばよいです。
from functools import cmp_to_key
li=[[x,y] for x in range(10) for y in range(10)]
sorted_li = sorted(li,key=cmp_to_key(lambda a,b:a[1]*b[0]-a[0]*b[1]))
###蛇足
例に挙げた操作を素直に実装すると、次のようになります。
li=[[x,y] for x in range(10) for y in range(10)]
sorted_li = sorted(li,key=lambda a:a[1]/a[0])
しかし、この方法ではy/x
の計算において小数に由来する誤差が生じ、正しく要素間の比較演算ができない可能性があります。上記のようにcmp_to_key()
を用いて比較すると、整数同士の和(差)と積を計算するだけで良いので、誤差なくソートすることができます。