<div style="word-wrap: break-word; color: rgb(102, 102, 102); font-family: 宋体, Arial; font-size: 16px; line-height: 26px;">python的优先权队列,根据优先权来进行队列排序,</div><div style="word-wrap: break-word; color: rgb(102, 102, 102); font-family: 宋体, Arial; font-size: 16px; line-height: 26px;">但是注意优先权队列使用heap实现,而heap不是稳定的排序,所以,想要实现同优先权内部也有序,则需要增加一个计数,表示该优先权的顺序。参考以下代码:</div>
#!/usr/bin/python
from Queue import Queue
from Queue import PriorityQueue
a1='a1'
a2='a2'
a3='a3'
a4='a4'
a5='a5'
b1='b1'
b2='b2'
b3='b3'
b4='b4'
b5='b5'
q = Queue()
pq = PriorityQueue()
for i in xrange(5):
p = 5 - i
q.put("a"+str(p))
q.put("b"+str(p))
pq.put((p,"a"+str(p)))
pq.put((p,"b"+str(p)))
for i in xrange(5):
p = 5 - i
q.put("a"+str(p)+str(i+5))
q.put("b"+str(p)+str(i+5))
pq.put((p,"a"+str(p)+str(i+5)))
pq.put((p,"b"+str(p)+str(i+5)))
size = q.qsize()
print "queue item size:%s" %size
print "queue items:"
for i in xrange(size):
print q.get()
size = pq.qsize()
print "priority queue item size:%s" %size
print "priority queue items:"
for i in xrange(size):
print pq.get()
#"but priority queue with same priority is not queue, if we want so, do the following:"
import itertools
count = itertools.count()
poq = PriorityQueue()
for i in xrange(5):
p = 5 - i
poq.put((p,count.next(),"a"+str(p)))
poq.put((p,count.next(),"b"+str(p)))
for i in xrange(5):
p = 5 - i
poq.put((p,count.next(),"a"+str(p)+str(i+5)))
poq.put((p,count.next(),"b"+str(p)+str(i+5)))
size = poq.qsize()
print "priority ordered queue item size:%s" %size
print "priority ordered queue items:"
for i in xrange(size):
print poq.get()
- queue item size:20
- queue items:
- a5
- b5
- a4
- b4
- a3
- b3
- a2
- b2
- a1
- b1
- a55
- b55
- a46
- b46
- a37
- b37
- a28
- b28
- a19
- b19
- priority queue item size:20
- priority queue items:
- (1, 'a1')
- (1, 'a19')
- (1, 'b1')
- (1, 'b19')
- (2, 'a2')
- (2, 'a28')
- (2, 'b2')
- (2, 'b28')
- (3, 'a3')
- (3, 'a37')
- (3, 'b3')
- (3, 'b37')
- (4, 'a4')
- (4, 'a46')
- (4, 'b4')
- (4, 'b46')
- (5, 'a5')
- (5, 'a55')
- (5, 'b5')
- (5, 'b55')
- priority ordered queue item size:20
- priority ordered queue items:
- (1, 8, 'a1')
- (1, 9, 'b1')
- (1, 18, 'a19')
- (1, 19, 'b19')
- (2, 6, 'a2')
- (2, 7, 'b2')
- (2, 16, 'a28')
- (2, 17, 'b28')
- (3, 4, 'a3')
- (3, 5, 'b3')
- (3, 14, 'a37')
- (3, 15, 'b37')
- (4, 2, 'a4')
- (4, 3, 'b4')
- (4, 12, 'a46')
- (4, 13, 'b46')
- (5, 0, 'a5')
- (5, 1, 'b5')
- (5, 10, 'a55')
- (5, 11, 'b55')