Python 使用for循环创建在堆栈上运行的堆栈和迭代器
我试图用后进先出原则创建一个堆栈。我能够做到这一点,只需使用推和弹出功能。但是我想创建一个iter和一个next函数来遍历堆栈。下面是我尝试过的,但无法真正理解其中的逻辑Python 使用for循环创建在堆栈上运行的堆栈和迭代器,python,oop,iterator,stack,next,Python,Oop,Iterator,Stack,Next,我试图用后进先出原则创建一个堆栈。我能够做到这一点,只需使用推和弹出功能。但是我想创建一个iter和一个next函数来遍历堆栈。下面是我尝试过的,但无法真正理解其中的逻辑 class Stack: def __init__(self): self.stack = [] self.START = None self.END = None def push(self, item): self.stack.append(item) #print("i
class Stack:
def __init__(self):
self.stack = []
self.START = None
self.END = None
def push(self, item):
self.stack.append(item)
#print("item added to stack")
def pop(self):
return self.stack.pop()
#print("value removed according to LIFO")
def emptystack(self):
return len(self.stack) == 0
def __iter__(self):
self.Iterator = self.START
return self
def __next__(self):
if self.Iterator != None:
stack = self.Iterator
self.Iterator = self.Iterator.NEXT
return node
else:
raise StopIteration
def fullstack(self):
return self.stack
s = Stack()
s.push('1')
s.push('2')
s.push('6')
s.push('8')
s.push('11')
s.push('12')
s.pop()
s.push('50')
if s.emptystack():
print("Stack is empty")
else:
print(s.fullstack())
由于要存储堆栈元素需要
list
,因此可以使用python的iter
函数返回迭代器并使用它
class Stack:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
#print("item added to stack")
def pop(self):
return self.stack.pop()
#print("value removed according to LIFO")
def emptystack(self):
return len(self.stack) == 0
def stack_iter(self):
return iter(self.stack)
def stack_iter_next(self, iterator):
return next(self.Iterator)
def fullstack(self):
return self.stack
s = Stack()
s.push('1')
s.push('2')
s.push('6')
s.push('8')
s.push('11')
s.push('12')
s.pop()
s.push('50')
s_iter = s.stack_iter()
for x in s_iter:
print (x)
您的
迭代器
属性将始终为None
,因为您会在第一次调用next时立即停止迭代。从Python文档中关于\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu
可以将next视为对每个项调用,直到没有更多的项要处理:
从容器中返回下一个项目。如果没有其他项,则引发StopIteration异常
您可以做的一件事是将self.Iterator
初始化为堆栈的长度(在中),然后在每一步上,减小它直到达到0(然后提高StopIteration):
def\uuuu iter\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
self.Iterator=len(self.stack)-1#初始化为最后一个元素的索引
回归自我
定义下一个(自我):
如果self.Iterator>=0:
当前值=self.stack[self.Iterator]
self.Iterator=self.Iterator-1#为下一步更新
返回当前值
else:#如果self.Iterator为-1,则停止
提出停止迭代
self。迭代器
初始化为None
,并且从未更改,因此\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()中的if
语句将始终为false。