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(队列,数)
答案 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__
或类似的东西