Python標準庫 優先順序佇列

2021-09-03 02:41:24 字數 2351 閱讀 7907

從第乙個元素開始比較,如果不等則將第乙個元素的比較結果作為整個元組的比較結果;

如果相等則尋找下乙個元素重複上述比較過程

>>> (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())

... 12

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, ***):

# 優先順序

self.key = key

# 具體的屬性值,可以用類封裝起來

self.name = name

self.*** = ***

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.***

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. 2. 

3. 4. 

python優先順序佇列 python 優先順序佇列

簡介 優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時 4,a 6,r 3 d 則出隊順序 6,r 4,a 3 d 優先順序佇列的python實現 class priorityqueue object def i...

python優先順序佇列

class priorityqueue data dict def init self pass 入隊 如果物件沒有優先等級,則新增到隊尾,如果對空,則預設等級為1 如果物件有優先等級,如果有同等級的則新增到對應等級末尾 def push self,obj,key none if key none ...

優先順序佇列 python

在之前寫最短路徑,和哈夫曼編碼的時候都用到了優先順序佇列優化,用的是c 中的包,priority queue。那在python中會以什麼形式存在呢。class array object def init self,maxsize none self.elem none maxsize self.le...