给我的比较函数一个相对点作为参数

时间:2016-12-20 11:30:36

标签: python sorting compare

我有一个图表类,其中包含2d网格上的节点。 我想通过使用比较函数与相对点(称为end)进行比较来对图中的节点进行排序。 我希望能够在函数内部进行比较,但我很难理解如何将相对点传递给compare函数。

我的代码:

class Graph:
  def __init__(self, end):
    self.nodes = set()
    self.edges = defaultdict(list)
    self.distances = {}
    self.end = end
  def add_node(self, value):
    self.nodes.add(value)

  def add_edge(self, from_node, to_node, distance):
    self.edges[from_node].append(to_node)
    self.edges[to_node].append(from_node)
    self.distances[(from_node, to_node)] = distance

  def compare(node1, node2):

      d1 = findDist(end, node1)
      d2 = findDist(end, node2)
      if d1 < d2:
          return -1
      elif d1 > d2:
          return 1
      else:
        return 0

  def sortPoints(self):
        sorted(self.edges, key=self.compare)

因此比较函数通常会获得2个参数,而内置排序函数知道如何使用它。我认为使用相对点作为类成员,但我再次找不到一种方法来为我的比较函数提供self关键字,并访问它。

有没有什么好方法可以实现这个目标?

1 个答案:

答案 0 :(得分:1)

由于您希望使用findDist的返回值作为键,因此您可以findDist使用Graph方法。然后,您可以将其作为key参数传递给已排序的sorted(self.edges, self.findDist)。这是一个关于它如何工作的简化示例:

class Graph:
    def __init__(self, end):
        self.end = end

    def find_dist(self, x):
        return abs(self.end - x)

    def sort_values(self, it):
        return sorted(it, key=self.find_dist)

g = Graph(10)
print(g.sort_values(range(5, 15)))

输出:

[10, 9, 11, 8, 12, 7, 13, 6, 14, 5]