0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonのlistで2要素間比較ソート

Posted at

達成したいこと: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()を用いて比較すると、整数同士の和(差)と積を計算するだけで良いので、誤差なくソートすることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?