[英]How to change the priority function of Priority Queue in Python?
我想在 Python 中实现 Djikstra 的算法。 因此,当我将图的节点存储在优先级队列中时,我希望它们按照它们与源节点的距离顺序进行排序。 如何更改优先级 function 以便以这种方式对节点进行排序? 我在队列模块中使用 PriorityQueue Class。 默认情况下,输入的整数按降序排列,即最小元素的优先级最高。 我想输入一个优先级 function,它根据节点 object 中的距离属性对节点进行排序。 以下是节点 class - class 节点节点距离 有人可以帮我吗?
正如文档所解释的, python 中的PriorityQueue
似乎不接受自定义比较功能。 但是,您可以使用min
和常规列表来实现您想要的,因为min
function 调用接受一个决定最小项目是什么的key
function 。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.