我试着根据它们的极角对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