Python优先级队列排序失效问题:如何修复enqueue方法?
优先级队列排序问题修复方案
你的代码本身的排序逻辑是对的,但问题出在测试方式上:你创建了两个完全独立的PriorityQueue实例(x和y),每个实例只插入了一个元素——单个元素的列表排序后当然还是它自己,自然看不到排序效果。
修复方法很简单:使用同一个队列实例多次调用enqueue方法,插入不同优先级的元素,就能看到排序后的结果了。
修复后的测试代码:
class PriorityQueue: def __init__(self): self.q = [] def enqueue(self, priority, item): self.q.append([priority, item]) self.q = sorted(self.q) return self.q # 使用同一个实例进行多次入队操作 pq = PriorityQueue() print(pq.enqueue(3, "Potato")) # 输出: [[3, 'Potato']] print(pq.enqueue(1, "Egg")) # 输出: [[1, 'Egg'], [3, 'Potato']] print(pq.enqueue(2, "Carrot")) # 输出: [[1, 'Egg'], [2, 'Carrot'], [3, 'Potato']]
补充说明:
- Python的
sorted函数对列表排序时,会默认按列表元素的顺序依次比较。对于[priority, item]这样的子列表,会先比较priority值(数字升序),如果优先级相同,再比较item的字符串顺序,完全符合优先级队列的基本需求。 - 如果需要降序排序,可以修改
sorted的参数:self.q = sorted(self.q, reverse=True)
内容的提问来源于stack exchange,提问作者iaivazovski
相关产品推荐
相关产品推荐

