在Python中实现队列 - 两个isempty()方法给出不同的答案

时间:2017-01-27 17:08:35

标签: python python-3.x oop queue

我正在做一些基本的Python编程练习练习,并试图实现一个队列(使用列表)。不幸的是,我正在为我的isempty()函数获取我不理解的行为。运行下面的代码时,最后两行给出不同的答案:A产生False,而B产生True。为什么A也没有产生假?

class Queue:

  def __init__(self):
    self.items = []

  def push(self,item):
    self.items.insert(0,item)

  def pop(self):
    return self.items.pop()

  def size(self):
    return len(self.items)

  def isempty(self):
    return self.size == 0

q = Queue()
q.push("a")
q.push("b")
print(q.pop())
print(q.isempty())
print(q.pop())
print(q.isempty()) # shouldn't this (A)...
print(q.size()==0) # ...and this (B) yield the same answer?

2 个答案:

答案 0 :(得分:3)

只需将isempty()方法更改为:

即可
def isempty(self):
    return self.size() == 0

答案 1 :(得分:0)

Queue.isempty()的实施正在检查方法size是否等于整数0,这将永远不会成立。

class Queue:                 

  def __init__(self):        
    self.items = []          

  def push(self,item):       
    self.items.insert(0,item)

  def pop(self):             
    return self.items.pop()  

  def size(self):            
    return len(self.items)   

  def isempty(self):         
    return self.size == 0    

q = Queue()                  
print(q.size)

制作:

  

<< __ main __的绑定方法Queue.size。位于0x02F4EA10的队列对象>>

最简单的解决方案是使用Christopher Shroba的建议来修改您的Queue.isempty()实现,以使用列表的大小方法。