Python---优先队列PriorityQueue

本文介绍了Python中使用`queue`模块的PriorityQueue实现优先队列,并展示了如何处理多个数值、类对象的优先级排序。通过示例代码,解释了在队列元素相同时如何进行次级排序,以及如何自定义类的比较规则来控制出队顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优先队列PriorityQueue

单个数值

from queue import PriorityQueue
pq = PriorityQueue(maxsize=10)		# 创建最大容量为10的优先队列
pq.put(2)
pq.put(1)
pq.put(3)
pq.put(1)
print(pq.get())
print(pq.get())
print(pq.get())
--> 1
--> 1
--> 2

多个数值

当保存项包含多个不同类型的值时,先按第一个值排序

from queue import PriorityQueue
pq = PriorityQueue()
pq.put(("b", 1))
pq.put(("a", 2))
pq.put(("c", 3))

print(pq.get())
--> ('a', 2)
from queue import PriorityQueue
pq = PriorityQueue()
pq.put((2, "a"))
pq.put((1, "b"))
pq.put((3, "c"))
print(pq.get())
--> (1, 'b')

若第一个值相同,则依次按第二、三个值排序

from queue import PriorityQueue
pq = PriorityQueue()
pq.put(("a", 2))
pq.put(("a", 1))
pq.put(("c", 3))

print(pq.get())
--> ('a', 1)

注: 若前N个值都相同,需确保第N + 1个值不同且可比较,若不可比较会报错。

保存类对象

当保存某个类的对象作为队列中元素时,可在类中通过 lt 函数控制元素之间的对比

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __lt__(self, other):
        return self.age < other.age		# age小的优先出队列


from queue import PriorityQueue
pq = PriorityQueue()

pq.put(Dog("a", 2))
pq.put(Dog("b", 1))
pq.put(Dog("c", 3))
p1 = pq.get()
p2 = pq.get()
print(p1.name, p1.age)
print(p2.name, p2.age)

--> b 1
--> a 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值