Python3中的栈迭代
好的,我想把一个单词放进一个栈里,然后在输入一个字符串后把所有的单词打印出来。不过我只能一次打印一个。我试着在外面用一个循环,但栈似乎不能直接遍历。所以我在栈里面进行遍历,但还是不行。
class Stack:
def __init__(self):
self.items = []
def push(self,items):
self.items.insert(0,items)
def pop(self):
for x in self.items:
print( self.items.pop(0))
def show(self):
print (self.items)
s = Stack()
s.show()
placed = input("enter")
item = s.pop()
print(item, "is on top", s)
1 个回答
0
给你的 Stack
类添加一个 __len__
方法,这样可以更方便地检查栈是否为空:
class Stack:
def __init__(self):
self.items = []
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def show(self):
print (self.items)
def __len__(self):
return len(self.items)
stack = Stack()
stack.push('World!')
stack.push('Hello')
while stack: # tests the length through __len__
print(stack.pop())
注意,我只是把元素用 .append()
方法加到 .items
列表的末尾,然后再用 .pop()
方法(不带参数)从列表的末尾移除元素。
为了让你的类变成 可迭代类型,你至少需要添加一个 __iter__
方法,可以选择再加一个 .__next__()
方法:
class Stack:
# rest elided
def __iter__(self):
return self
def next(self):
try:
return self.items.pop()
except IndexError: # empty
raise StopIteration # signal iterator is done