我正在尝试创建一个函数,它接受一个数字作为参数,并从队列中删除它的所有出现

时间:2017-06-17 18:00:07

标签: python queue

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

    def is_empty(self):
        return self.items == []

    def add(self, item):
        self.items.append(item)

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

我需要创建一个函数,该函数接受一个数字作为参数,然后队列删除队列中该数字的每次出现,但遗漏除外。我已经建立了一个我的队列在上面看起来像什么的模型,我将在下面列出一个队列应该看起来像什么样的模型(它很乱并且处于早期阶段)。 / p>

def remove_item(q, val):
q_temp = Queue

while not q.is_empty():
  q_temp.add(q.remove)
remove_item()

我无法以任何方式直接修改它,我无法将Queue的元素放在普通列表中。有人有任何解决方案?

编辑:它也需要在IDLE中执行,如此

  
    
      

remove_item(队列,数)

    
  

2 个答案:

答案 0 :(得分:1)

我会做的是这样的事情:

number_to_remove = 123 
for i in range(0, queue.length()):
    number = queue.remove()
    if number != number_to_remove:
        queue.add(number)

那样你"循环"通过队列,你看看每个号码,如果它不是你应该删除的号码,那么只需再次添加。您需要创建.length()方法。

答案 1 :(得分:0)

该代码将因为错误的缩进而失败:

def remove_item(q, val):
#>  q_temp = Queue

您正在为课程设置q_temp,而不是将其设置为实例,因此无法对其进行修改。

    q_temp = Queue()

并且,.remove方法不起作用,有一种更简单的方法可以使其工作:

def remove(self):
    return self.items.pop(-1)

但我没有(完全有效)的答案。我可以获取队列的项目,我使用条件列表推导来删除已确定的项目,并将其应用到队列中。

def removeFromQueue(queue, value = ""):
    items = queue.items
    queue.items = [i for i in items if i != value]
    return queue

如果你让我们使用Queue类只使用类方法(我们可以创建变量,制作另一个队列,.remove.add数字,你可以这样做,但不能使用.items)你可以这样做:

def removeFromQueue(queue, value = ""):
  items = []
  for i in len(queue):
    items.append(queue.remove())
  items = [i for i in items if i != value]:
  for i in items:
    queue.add(items.pop(0))

我认为这不是有效的。它需要定义Queue.__len__() *:

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

*或修改代码并定义__iter__或类似的东西