Python標準庫: 優先順序佇列
阿新 • • 發佈:2018-12-21
python中元組比較大小
從第一個元素開始比較,如果不等則將第一個元素的比較結果作為整個元組的比較結果;
如果相等則尋找下一個元素重複上述比較過程
>>> (2,3,4)<(3,4)
True
>>> (2,3,4)<(2,3,5)
True
>>> (2,3,4)<(2,3,1)
False
優先佇列
優先佇列內部預設實現的是小根堆,具有的操作主要有:
向佇列中新增元素 Queue.put(obj),每新增一個元素優先佇列內部就會進行調整成最小堆;
從佇列中獲取元素 Queue.get(),每取出一個元素佇列內部就會進行調整;
佇列判空 Queue.empty()
佇列大小 Queue.qsize()
佇列儲存的元素是數字:
>>> from queue import PriorityQueue
>>> q = PriorityQueue()
>>> q.put(1)
>>> q.put(2)
>>> q.put(3)
>>> while not q.empty():
... print(q.get())
...
1
2
3
佇列儲存的元素是元組:
>>> q = PriorityQueue() >>> q.put((1, "as")) >>> q.put((3, "aas")) >>> q.put((2, "zx")) >>> q.get() (1, 'as') >>> q.get() (2, 'zx') >>> q.get() (3, 'aas') >>> q.get()
佇列儲存的元素是自己編寫的類:
from queue import PriorityQueue class comobj(): def __init__(self, key, name, sex): # 優先順序 self.key = key # 具體的屬性值,可以用類封裝起來 self.name = name self.sex = sex def __lt__(self, other):# 這裡的比較規則是:先根據key的大小判斷,如果key相等則根據name判斷 # 最後都形成小根堆 if self.key < other.key: return True elif self.key > other.key: return False else: return self.name < other.name def __str__(self): return str(self.key) + " " + self.name + " " + self.sex print("test1:") q = PriorityQueue() q.put(comobj(10, "zhu", "male")) q.put(comobj(1, "zu", "male")) q.put(comobj(12, "zh", "female")) print(q.get()) print(q.get()) print(q.get()) print() print("test2:") q = PriorityQueue() q.put(comobj(10, "zhu", "male")) q.put(comobj(1, "zu", "male")) q.put(comobj(12, "zh", "female")) q.put(comobj(12, "zi", "female")) print(q.get()) print(q.get()) print(q.get()) print(q.get()) """輸出結果: test1: 1 zu male 10 zhu male 12 zh female test2: 1 zu male 10 zhu male 12 zh female 12 zi female """
參考:
1. https://zhuanlan.zhihu.com/p/37637660
2. https://blog.csdn.net/lanchunhui/article/details/52316973
3. https://blog.csdn.net/liu2012huan/article/details/53264162