web-dev-qa-db-ja.com

PriorityQueueからアイテムを削除せずに取得できますか?

次のアイテムをキューに入れたいのですが、デキューしたくありません。 PythonのPriority Queueで可能ですか? docs から、どうすればそれができるかわかりません

24
Jiew Meng

理論に従ってキューからアイテムを取得すると、キューから削除されます。 PriorityQueueの最後の要素を提供する独自の関数を作成する必要があります。 priorityqueueを継承することにより、ピーク関数を作成できます。

1
Nilesh

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')]

ただし、マルチスレッドアクセスには注意してください。

30
HYRY

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))
5
Victor Juliet

キューの最初の要素のインデックス付けが機能するはずです。 heapq ライブラリを使用している場合、ドキュメントには次のように記載されています。

ヒープの興味深い特性は、その最小要素が常にルートheap[0]

2
Aayush Kumar

PriorityQueueに保存されているアイテムがタプル(キー、値)であると仮定すると、

def peak(pq):
  return pq.queue[0][1] 
2
hamster ham