2016-12-03 8 views
4

とのタプルをソートする方法を私はタプルcoordsの持っている:
ラムダ

[(1, 2), (3, 2), (1, 4)] 

をそして私はまた、単一のCOORD持っている:私は間の距離に応じて上記のタプルをソートする必要がある今(8, 7)

をタプル内の各点と単一点。

sorted()でこれを行う方法は?

答えて

7

基本的には、ポイントptとリスト内の各タプルの間のユークリッド距離を計算することができます。関数numpy.hypotはこれを行うことができますが、望むなら実装するのは自明です。

>>> from numpy import hypot 
>>> l = [(1, 2), (3, 2), (1, 4)] 
>>> pt = [8,7] 
>>> sorted(l, key = lambda i: hypot(i[0]-pt[0], i[1]-pt[1])) 
[(3, 2), (1, 4), (1, 2)] 
+0

あなたは(AB)は、他のインポートを避けるために、 'complex'タイプを使用することができます。 'ソート済み(l、key =ラムダx:abs(コンプレックス(* x) - コンプレックス(* pt))' – chepner

3

あなたがnumpyのを使用したいと、それは純粋なPythonので終わらせたくない場合は、

>>> array = [(1, 2), (3, 2), (1, 4)] 
>>> point = [8, 7] 
>>> array.sort(key = lambda k: (k[0] - point[0])**2 + (k[1] - point[1])**2) 
>>> array 
[(3, 2), (1, 4), (1, 2)]