我正在尝试创建一个函数,该函数将数字作为参数,并从Queu中删除所有出现的数字

2024-04-20 04:13:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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()

我需要创建一个函数,该函数接受一个数字作为参数,然后一个队列删除该数字在队列中的每一次出现,但不包括遗漏。我已经建立了一个模型,上面是我的队列的样子,下面是一个队列应该是什么样子的模型(非常混乱,处于早期阶段)

def remove_item(q, val):
q_temp = Queue

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

我不能以任何方式直接修改它,也不能将队列的元素放在普通列表中。有什么解决办法吗

编辑:它也需要像这样在空闲状态下可执行

remove_item(queue,number)


Tags: 函数模型selfaddreturn队列queueis
2条回答

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

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__之类的

我会这样做:

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

这样你就可以在队列中“循环”了,你可以查看每个数字,如果不是你应该删除的数字,那么就再添加一次。不过,您需要创建.length()方法

相关问题 更多 >