堆栈是一种非常常见且简单易用的数据结构,适用在多种应用场合。堆栈是一种数据项按序排列的数据结构,只能在一端(栈顶)对数据项进行插入和删除,遵循后进先出的原则。
在不同的需求中,栈的操作可能不仅限于进栈和出栈,可能还需要检测栈是否为空,获取栈顶元素但并不将其弹出,遍历栈内所有元素,或者检测某元素是否在栈中存在等等。
在Python中,一个简单的列表元素通常足够用来实现栈:它允许对其中的元素进行任意操作,从任意一端插入或取出元素。下表总结了一些Python内置的列表操作方法来模拟栈操作。操作栈顶处于列表末尾栈顶位于列表起始位置栈顶位于列表起始位置
新建stack=['a', 'b']stack=['b', 'a']stack=['b', 'a']
进栈stack.append('c')stack.insert(0,'c')stack[0:0]=['c']
出栈top = stack[-1]
del stack[-1]top = stack[0]
del stack[0]top = stack[0]
stack[:1] = []
在上表中,我们的出栈操作分为两步,先获取元素,后删除。实际上,要完成这一工作,有个更简单的方法就是利用Python的pop方法,它默认删除列表末尾的元素并返回。该方法支持传入一个参数,即偏移量。即删除并返回指定位置的元素。
甚至说还有一种方法可以实现:# top is front of list
top, stack = stack[0], stack[1:] # Python 1.X+
top, *stack = stack # Python 3.X
# top is end of list
stack, top = stack[:-1], stack[-1] # Python 1.X+
*stack, top = stack # Python 3.X
不过该方法的确点在于会额外生成新的列表。
本文部分翻译自《Programming Python》4th Edition