Python 为什么在应用此代码时出现此错误。我已经附上了下面的错误和代码?
由于列表中没有任何元素,因此出现错误 如果列表的索引Python 为什么在应用此代码时出现此错误。我已经附上了下面的错误和代码?,python,list,data-structures,stack,queue,Python,List,Data Structures,Stack,Queue,由于列表中没有任何元素,因此出现错误 如果列表的索引i 如果要添加元素,可以使用list.append(元素) 您的功能变为: class Queue: def __init__(self,size): self.front=self.rear=-1 self.Q=list() self.size=size def empty(self): return self.front==self.rear def f
i
如果要添加元素,可以使用list.append(元素)
您的功能变为:
class Queue:
def __init__(self,size):
self.front=self.rear=-1
self.Q=list()
self.size=size
def empty(self):
return self.front==self.rear
def full(self):
return self.rear==self.size-1
def enqueue(self,item):
if self.full():
print("Stack Overflow")
return
else:
self.rear+=1
self.Q[self.rear]=item
def dequeue(self):
if self.empty():
print("Stack Underflow")
return
else:
a=-1
self.front+=1
a=self.Q[self.front]
return a
如果你能详细解释一下为什么要使用前后等,我可以帮你更多。原因很简单。您将获得一个
索引器
,这意味着您正试图读取/写入列表中不存在的索引。解决这一问题的关键是在\uuuu init\uuu
方法中使用None
或0
初始化列表
拟议的解决办法
在这里,列表中填充了
size
number ofNone
值。这使得使用索引访问值成为可能。您的Q为空,包含0个元素,您正试图修改位置1不存在的元素。上面的代码是使用我计算的数组实现的队列,但我的观点仍然有效。您应该在我可以追加之前追加或定义大小,但我没有使用append方法和您的第二个问题来执行此操作。我已经在语法中定义了大小。您已经定义了size
,但arr的长度仍然为0self.Q=list()
的大小应该类似于self.Q=[None]*5
。但让固定长度队列使用append
没有多大意义。还有collections.deque
存在,所以您也可以使用它。非常感谢!!。我的代码正在运行,实际上我忘记了添加none值。如果这有帮助,您可以接受此答案并对其进行投票…:)在几次调用排队
后,这仍然会导致问题;应该有一种机制来调整队列的大小,或者至少是重新居中队列,因为当用户在排队和退队之间交替时,队列正在漂移。@TanayDuggad在应用Melvin的修复后,请尝试以下代码:q=queue(10)
for i in range(20):print(i)q.enqueue(i)q.dequeue()
@TanayDuggad用户希望它能正常工作,因为队列中的元素永远不会超过一个。然而,在添加和删除第十个元素之后,队列溢出,无法再添加任何元素。你们明白为什么吗?我的代码终于开始运行了,因为我在创建数组时忘记了向索引中添加None值。谢谢你们的贡献。我添加了后部和前部,因为我们可以添加后部索引,而我们可以根据队列的FIFO原则从顶部索引弹出。这导致了O(1)时间复杂度
def enqueue(self,item):
if self.full():
print("Stack Overflow")
return
else:
self.rear+=1
self.Q.append(item)
def __init__(self, size):
self.front = self.rear=-1
self.size = size
self.Q = [None for i in range(self.size)] # Initializes the list with `None` values