使用更改参数的函数作为排序中的键

时间:2016-05-18 01:21:58

标签: python sorting polar-coordinates

我正在尝试根据它们的极角对x-y平面中的点列表进行排序,并从具有最小y值的列表中选择一个点。

我用过

min(listPts, key=lambda t: (t[1], -t[0]))

在listPts中找到最小y值

我有一个函数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

我想知道是否有可能以某种方式将此函数用作.sort()方法中的一个键,因为每个被检查的点都会有一个不同的theB点?

欢呼声

1 个答案:

答案 0 :(得分:1)

是。 Read the documentation for list.sort,它就在那里。参数甚至与min具有相同的名称。

更新:如果我了解您的真实问题,theta计算点之间的相对角度,并且您希望根据{{{>>对点进行排序1}}以某种方式得分?

如果这是正确的,那么你真的需要一个多步骤的过程:

  1. 为每个原点和目的地生成所有点对(所有可能的点排列/组合,或通过一些更具选择性的初始配对算法)
  2. 根据他们的theta得分对对进行排序
  3. 为此,您使用itertools.permutations生成对(或先排序以获得一致的点排序,然后使用itertools.combinations,这样您就不会为点{{1}创建对然后使用theta对结果对进行排序,以按对象的相对角度对这些对进行排序。例如:

    (A, B)

    输出:

    (B, A)

    对应theta的{​​{1}}值。