如何用lambda对元组进行分类



我有一个元组坐标:

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

我也有一个坐标: (8, 7)

现在,我需要根据元组和单点之间的每个点之间的距离对元组进行排序。

如何使用sorted()

本质上,您可以在列表中的点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)]

如果您不想使用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)]

最新更新