46

次のアイテムをキューに入れたいのですが、デキューしたくありません。Pythonで可能queue.PriorityQueueですか?ドキュメントから、私はそれがどのように行われることができるかわかりません

4

6 に答える 6

59

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[0])
print(a.queue)
print(a.get())
print(a.queue)
print(a.get())
print(a.queue)

出力は:

(3, 'c')
[(3, 'c'), (10, 'a'), (4, 'b')]
(3, 'c')
[(4, 'b'), (10, 'a')]
(4, 'b')
[(10, 'a')]

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

于 2012-02-15T05:08:08.897 に答える
6

PriorityQueueの次の要素が必要な場合は、要素の挿入順に次を使用します。

for i in range(len(queue.queue)):
    print queue.queue[i]

これは何も飛び出しません。

優先順位を付ける場合は、次を使用します。

for i in range(len(queue.queue)):
    temp = queue.get()
    queue.put(temp)
    print temp

単一の変数ではなくタプルを使用している場合は、tempを次のように置き換えます。

((temp1,temp2))
于 2015-06-11T05:40:46.037 に答える
4

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

def peek(pq):
  return pq.queue[0][1] 
于 2017-05-14T04:43:17.360 に答える
3

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

ヒープの興味深い特性は、その最小要素が常にルートであるということheap[0]です。

于 2012-02-15T04:53:43.190 に答える
2

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

于 2012-02-15T04:56:58.827 に答える
0

がPeriorityQueueの場合q、次を使用できます。

for i in range(q.qsize()):
    print(q.queue[i])
于 2021-09-18T11:04:25.833 に答える