Python如何改变Priority Queue的优先级函数?
How to change the priority function of Priority Queue in Python?
我想在 Python 中实现 Djikstra 算法。因此,当我将图的节点存储在优先级队列中时,我希望它们按照与源节点的距离顺序进行排序。我怎样才能改变优先级函数,以便节点以这种方式排序?
我在队列模块中使用 PriorityQueue Class。默认情况下,输入的整数按降序排列,即最小元素的优先级最高。我想输入一个优先级函数,它根据节点对象中的距离属性对节点进行排序。以下是节点 class -
class 节点
节点
距离
有人可以帮我吗?
如文档所述,python 中的 PriorityQueue
似乎不接受自定义比较函数。但是,您可以使用 min
和常规列表来实现您想要的,因为 min
函数调用接受一个 key
函数来决定最小的项目是什么。
class node():
def __init__(self, dist):
self.dist = dist
def get_dist(node):
return node.dist
nodes = [node(4), node(413), node(2), node(14), node(5)]
out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 2
out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 4
out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 5
我想在 Python 中实现 Djikstra 算法。因此,当我将图的节点存储在优先级队列中时,我希望它们按照与源节点的距离顺序进行排序。我怎样才能改变优先级函数,以便节点以这种方式排序? 我在队列模块中使用 PriorityQueue Class。默认情况下,输入的整数按降序排列,即最小元素的优先级最高。我想输入一个优先级函数,它根据节点对象中的距离属性对节点进行排序。以下是节点 class - class 节点 节点 距离 有人可以帮我吗?
如文档所述,python 中的 PriorityQueue
似乎不接受自定义比较函数。但是,您可以使用 min
和常规列表来实现您想要的,因为 min
函数调用接受一个 key
函数来决定最小的项目是什么。
class node():
def __init__(self, dist):
self.dist = dist
def get_dist(node):
return node.dist
nodes = [node(4), node(413), node(2), node(14), node(5)]
out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 2
out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 4
out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 5