我有一个图表类,其中包含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关键字,并访问它。
有没有什么好方法可以实现这个目标?
答案 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]