i有一个图形类,该类别具有2D网格上的节点。我想使用比较函数与称为end的相对点(称为end)进行分类。我希望能够比较该功能内部,但是我正在努力了解如何将相对点传递到比较函数。
我的代码:
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个参数,并且内置的分类函数知道如何使用它。我以为将相对点作为班级成员,但我再也找不到给我比较函数的方法并访问它的方法。
有什么好方法可以实现此目标?
,因为您想将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]