Python中的优先队列

0 投票
1 回答
10127 浏览
提问于 2025-04-17 20:28

我正在优先队列中添加数据,格式是 (优先级, 数据),但是当我使用 get() 函数时,返回的是我的优先级,而不是数据。如果我用 (数据, 优先级) 的格式添加数据,它又是按照数据的值来排序的。

这是我尝试的代码

from Queue import PriorityQueue
q= PriorityQueue(0)
q.put(4,8)
q.put(3,7)
q.put(2,6)
q.put(1,5)
while not q.empty():
    item = q.get()[1]
    print item,
print

q= PriorityQueue(0)
q.put(4,5)
q.put(3,6)
q.put(2,7)
q.put(1,8)
while not q.empty():
    item = q.get()[1]
    print item,
print

第一个代码出现了错误,提示 TypeError: 'int' object is not iterable 而第二个代码则提示 TypeError: 'int' object has no attribute 'getitem'

1 个回答

5

优先队列的工作方式和普通队列差不多,不过它里面的内容是由优先级, 项目组成的元组。所以,当你从这个队列中取东西时,get()会返回这样的元组。如果你想要获取实际的项目,可以用下面这种方法,这样可以同时得到项目和它的优先级:

prio, item = queue.get()

或者如果你根本不在乎优先级,可以直接用下面这种方式:

item = queue.get()[1]

想了解更多信息,可以查看官方的Python文档

编辑:你的评论显示你是用put(4, 8)把值放进队列的,这样你只放了4,而8则成为了put()block参数 - 你需要放一个元组,像这样:

queue.put((4, 8))

撰写回答