打印堆栈中的每个项目而不删除它

时间:2017-12-10 15:06:32

标签: python

是否可以在不从堆栈中移除物品的情况下窥视堆栈的其他部分?我想打印每一层,但s.peek只显示堆栈的顶层。

s=Stack()
#items in the stack
s.push("Adam")
s.push("Ben")
s.push("Cassie")
s.push("Deborah")
s.push("Elvin")

1 个答案:

答案 0 :(得分:1)

这取决于Stack的实施。 但是,Python列表很适合用作堆栈,使用appendpop方法:

>>> 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))