【问题标题】:Implementing a queue in Python - two isempty() methods giving different answers在 Python 中实现队列 - 两个 isempty() 方法给出不同的答案
【发布时间】:2017-01-27 17:08:35
【问题描述】:

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

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?

【问题讨论】:

  • self.size 是一种方法。 self.size() 返回大小,但 self.size 是方法本身,而不是数字。
  • 虽然您的类的行为确实像一个队列,但pushpop 是通常与堆栈相关的术语(它们是 LIFO 数据结构)。考虑改用术语enqueuedequeue

标签: python python-3.x oop queue


【解决方案1】:

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

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

【讨论】:

  • 我的荣幸!如果这里的答案解决了您的问题,如果您不介意,请将其标记为已接受:)
【解决方案2】:

您对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)

生产:

>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2016-03-15
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多