我試着根據它們的極角對x-y平面中的點列表進行排序,並從具有最小y值的列表中選擇一個點。使用函數作爲關鍵參數
我用
min(listPts, key=lambda t: (t[1], -t[0]))
找到listPts
我有一個函數THETA找到兩點
def theta(pointA, pointB):
dx = pointB[0] - pointA[0]
dy = pointB[1] - pointA[1]
if abs(dx) < 1.e-6 and abs(dy) < 1.e-6:
t = 0
else:
t = dy/(abs(dx) + abs(dy))
if dx < 0:
t = 2 - t
elif dy < 0:
t = 4 + t
return t * 90
之間的角度最小的y值我想知道如果其可能以某種方式使用這個函數作爲.sort()方法中的一個關鍵點,因爲每個被檢查的點對於theta都會有不同的pointB?
歡呼聲
感謝您的回覆,這個問題的措辭非常糟糕。我知道一個函數可以作爲文檔中的一個鍵傳遞,但在這種情況下,它需要爲它正在排序的每個點(pointB)提供一個新的第二個參數? – saleem
@saleem:這是'cmp'功能(僅在Py2中)。但是,如果你閱讀文檔(認真地說,我在這裏鏈接了文檔),它直接鏈接到一個將舊式'cmp'函數轉換爲'鍵'函數的實用程序,這是微不足道的。 – ShadowRanger
@saleem:這就是說,讀過你正在使用的函數,它不是一個比較函數(返回值不是負數,0或正值表示相對順序)。這只是說明兩點之間有多遠,角度明智。但是你不能在相對角度上對離散點進行排序;你如何處理不同位置的2點對,但具有相同的相對位置?你是否希望點對按相對位置排序,所以單點實際上會在結果中出現多次? – ShadowRanger