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

Python 打印堆栈中的每个项目,而不删除它,python,Python,是否可以在不从堆栈中移除项目的情况下窥视堆栈的其他部分?我想打印每一层,但s.peek仅显示堆栈的顶层 s=Stack() #items in the stack s.push("Adam") s.push("Ben") s.push("Cassie") s.push("Deborah") s.push("Elvin") 它取决于堆栈的实现。 但是,Python列表非常适合用作堆栈,它们的append和pop方法: >>> stack = [] >>> st

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

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

它取决于
堆栈的实现。
但是,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
类,以便定义一个别名为
append
push
方法,一个只返回最后一个被推的元素的
peek
方法,甚至可以重新定义迭代行为,以便从顶部自然迭代

class Stack(list):
    def push(self, elt):
        self.append(elt)

    def peek(self):
        return self[-1]

    def __iter__(self):
        return iter(reversed(self))

您是否编写了
堆栈
类?它来自何处?您还应该注意,
peek
可以通过
stack[-1]
stack.push=stack.append来执行