如何按距离到给定点订购点列表?

时间:2015-06-04 05:58:02

标签: python

我有一个包含XY坐标的项目列表。现在,有一个方法可以获取XY个参数,并且应该根据给定的参数返回从最接近最远的坐标列表。

基本上,它看起来像这样:

class Point:
    x = 0.0
    y = 0.0

# List of points
points = ...

def get_ordered_list(x, y):
    # return 'points' ordered by distance to (x,y)

我是Python的新手,所以我几乎不知道如何订购商品。我该怎么做?

4 个答案:

答案 0 :(得分:2)

您可以使用key参数传递自定义函数进行排序,如下所示:

from math import sqrt

def get_ordered_list(points, x, y):
   points.sort(key = lambda p: sqrt((p.x - x)**2 + (p.y - y)**2))
   return points

答案 1 :(得分:1)

您可以在排序功能中使用键。

state

答案 2 :(得分:0)

你需要一个函数来获得两点之间的距离,我会把这个函数留给你。它将返回两点之间的距离,一点是你的主要点,另一点是列表。

在点数组的sorted方法中使用此函数。

答案 3 :(得分:0)

请参阅列表的sort方法,尤其是参数。它允许您放置一个返回键进行排序的函数。所以在你的例子中它可能是这样的:

def get_ordered_list(x, y):
    target_point = Point(x, y)
    points.sort(key=lambda p: distance(p, target_point))

假设distance(a, b)返回点ab之间的距离。另请注意sort()对列表进行排序,即修改原始列表。如果要返回已排序的新列表,请使用sorted函数。

顺便说一句 - 您定义的类可能无法按预期工作 - xy字段是类字段。要使它们成为实例字段,您必须在构造函数中定义它们:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y