繁体   English   中英

如何更改Python中Priority Queue的优先级function?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM