Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Python的优先权队列

python的优先权队列,根据优先权来进行队列排序,但是注意优先权队列使用heap实现,而heap不是稳定的排序,所以,想要实现同优先权内部也有序,则需要增加一个计数,表示该优先权的顺序。参考以下代码:
  1. #!/usr/bin/python
  2. from Queue import Queue
  3. from Queue import PriorityQueue
  4. a1="a1"
  5. a2="a2"
  6. a3="a3"
  7. a4="a4"
  8. a5="a5"
  9. b1="b1"
  10. b2="b2"
  11. b3="b3"
  12. b4="b4"
  13. b5="b5"
  14. q = Queue()
  15. pq = PriorityQueue()
  16. for i in xrange(5):
  17.     p = 5 - i
  18.     q.put("a"+str(p))
  19.     q.put("b"+str(p))
  20.     pq.put((p,"a"+str(p)))
  21.     pq.put((p,"b"+str(p)))
  22. for i in xrange(5):
  23.     p = 5 - i
  24.     q.put("a"+str(p)+str(i+5))
  25.     q.put("b"+str(p)+str(i+5))
  26.     pq.put((p,"a"+str(p)+str(i+5)))
  27.     pq.put((p,"b"+str(p)+str(i+5)))
  28. size = q.qsize()
  29. print "queue item size:%s" %size
  30. print "queue items:"
  31. for i in xrange(size):
  32.     print q.get()
  33. size = pq.qsize()
  34. print "priority queue item size:%s" %size
  35. print "priority queue items:"
  36. for i in xrange(size):
  37.     print pq.get()
  38. #"but priority queue with same priority is not queue, if we want so, do the following:"
  39. import itertools
  40. count = itertools.count()
  41. poq = PriorityQueue()
  42. for i in xrange(5):
  43.     p = 5 - i
  44.     poq.put((p,count.next(),"a"+str(p)))
  45.     poq.put((p,count.next(),"b"+str(p)))
  46. for i in xrange(5):
  47.     p = 5 - i
  48.     poq.put((p,count.next(),"a"+str(p)+str(i+5)))
  49.     poq.put((p,count.next(),"b"+str(p)+str(i+5)))
  50. size = poq.qsize()
  51. print "priority ordered queue item size:%s" %size
  52. print "priority ordered queue items:"
  53. for i in xrange(size):
  54.     print poq.get()
输出类似如下:
  1. queue item size:20
  2. queue items:
  3. a5
  4. b5
  5. a4
  6. b4
  7. a3
  8. b3
  9. a2
  10. b2
  11. a1
  12. b1
  13. a55
  14. b55
  15. a46
  16. b46
  17. a37
  18. b37
  19. a28
  20. b28
  21. a19
  22. b19
  23. priority queue item size:20
  24. priority queue items:
  25. (1, "a1")
  26. (1, "a19")
  27. (1, "b1")
  28. (1, "b19")
  29. (2, "a2")
  30. (2, "a28")
  31. (2, "b2")
  32. (2, "b28")
  33. (3, "a3")
  34. (3, "a37")
  35. (3, "b3")
  36. (3, "b37")
  37. (4, "a4")
  38. (4, "a46")
  39. (4, "b4")
  40. (4, "b46")
  41. (5, "a5")
  42. (5, "a55")
  43. (5, "b5")
  44. (5, "b55")
  45. priority ordered queue item size:20
  46. priority ordered queue items:
  47. (1, 8, "a1")
  48. (1, 9, "b1")
  49. (1, 18, "a19")
  50. (1, 19, "b19")
  51. (2, 6, "a2")
  52. (2, 7, "b2")
  53. (2, 16, "a28")
  54. (2, 17, "b28")
  55. (3, 4, "a3")
  56. (3, 5, "b3")
  57. (3, 14, "a37")
  58. (3, 15, "b37")
  59. (4, 2, "a4")
  60. (4, 3, "b4")
  61. (4, 12, "a46")
  62. (4, 13, "b46")
  63. (5, 0, "a5")
  64. (5, 1, "b5")
  65. (5, 10, "a55")
  66. (5, 11, "b55")