次のアイテムをキューに入れたいのですが、デキューしたくありません。 PythonのPriority Queueで可能ですか? docs から、どうすればそれができるかわかりません
理論に従ってキューからアイテムを取得すると、キューから削除されます。 PriorityQueueの最後の要素を提供する独自の関数を作成する必要があります。 priorityqueueを継承することにより、ピーク関数を作成できます。
AがPriorityQueueオブジェクトの場合、a.queue [0]を使用して次のアイテムを取得できます。
from Queue import PriorityQueue
a = PriorityQueue()
a.put((10, "a"))
a.put((4, "b"))
a.put((3,"c"))
print a.queue
print a.get()
print a.queue
print a.get()
print a.queue
出力は次のとおりです。
[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]
ただし、マルチスレッドアクセスには注意してください。
PriorityQueueの次の要素が必要な場合は、要素の挿入順に、次を使用します。
for i in range(len(queue)):
print queue.queue[i]
これは何もポップアウトしません。
優先順位で使用する場合は、次を使用します。
for i in range(len(queue)):
temp = queue.get()
queue.put(temp)
print temp
単一の変数の代わりにタプルを使用している場合、tempを次のように置き換えます。
((temp1,temp2))
キューの最初の要素のインデックス付けが機能するはずです。 heapq
ライブラリを使用している場合、ドキュメントには次のように記載されています。
ヒープの興味深い特性は、その最小要素が常にルート
heap[0]
。
PriorityQueueに保存されているアイテムがタプル(キー、値)であると仮定すると、
def peak(pq):
return pq.queue[0][1]