目录
队列:
from queue import Queue,LifoQueue,PriorityQueue
以上三种队列有什么不同?
1. Queue 与 joinableQueue类似
2. LifoQueue(栈,特点:后进先出)
from queue import Queue,LifoQueue,PriorityQueuea = LifoQueue() # 后进先出,栈。跟对列相比,仅是取得顺序不同a.put(1)a.put(2)a.put(3)print(a.get())print(a.get())print(a.get())
321
3. PriorityQueue(具备优先级的队列)
第1阶段:数字小优先级越高(进队列会排序:从小到大)
from queue import Queue,LifoQueue,PriorityQueueq = PriorityQueue() # 具备优先级的队列,取数据时,值越小,优先级越高q.put(1)q.put(3)q.put(2)print(q.get())print(q.get())print(q.get())# 比较两个元组中的数据b = (1,2,3,4,5)c = (0.9,2,3,4)d = (5,1,4,5)q.put(b)q.put(c)q.put(d)print(q.get())print(q.get())print(q.get())
123(0.9, 2, 3, 4)(1, 2, 3, 4, 5)(5, 1, 4, 5)
第2阶段:两个类如何比较(运算符重载,重写父类的“比较大小”的方法)
需求:比较两个人的年龄,从小到大排序;如果年龄相等,则按照姓名排序。
from queue import PriorityQueue# 定义类class person(): def __init__(self,name,age): self.name = name self.age = age # 重写运算符。即运算符重载 def __lt__(self, other): if self.age == other.age: return self.name < other.name return self.age < other.age# 创建队列q = PriorityQueue()p1 = person('ack',18)p2 = person('boo',18)p3 = person("hehe",17)q.put(p1) # ack 18q.put(p2) # boo 18q.put(p3) # hehe 17print(q.get().name)print(q.get().name)print(q.get().name)
heheackboo
运算符重载即 重写运算符方法。