是否可以在不从堆栈中移除物品的情况下窥视堆栈的其他部分?我想打印每一层,但s.peek
只显示堆栈的顶层。
s=Stack()
#items in the stack
s.push("Adam")
s.push("Ben")
s.push("Cassie")
s.push("Deborah")
s.push("Elvin")
答案 0 :(得分:1)
这取决于Stack
的实施。
但是,Python列表很适合用作堆栈,使用append
和pop
方法:
>>> stack = []
>>> stack.append(1)
>>> stack.append(2)
>>> stack.append(3)
>>> stack
[1, 2, 3]
>>> stack.pop()
3
>>> stack
[1, 2]
很好的奖励是你仍然可以将它用作列表,特别是对于迭代:
>>> for elt in stack:
... print(elt)
...
1
2
当然,您可能不喜欢append
名称,这并不能真正反映堆栈的本质。
如果您想要一个干净的接口,可以扩展list
类,以便定义一个push
方法,该方法使append
别名,peek
方法只返回最后一个元素推送,你甚至可以重新定义迭代行为,以便自然地从顶部迭代。
class Stack(list):
def push(self, elt):
self.append(elt)
def peek(self):
return self[-1]
def __iter__(self):
return iter(reversed(self))