Python 栈(stack)是一种后进先出(LIFO)的数据结构,意味着最后一个添加到栈中的元素是第一个被移除的。在 Python 中,我们可以使用内置的 list 列表类型来实现栈的相关操作。
以下是 Python 栈的使用方法:
创建一个栈
在 Python 中,我们可以通过创建一个空列表来作为一个栈。例如,我们可以使用以下代码创建一个栈:
stack = []
添加元素至栈顶
要将一个元素添加到栈中,我们可以使用 list 类型的 append()
方法将其添加到列表末尾。例如,我们将数字 1 和 2 添加到栈中:
stack = []
stack.append(1)
stack.append(2)
print(stack) # 输出 [1, 2]
移除栈顶元素
要移除栈顶元素,我们可以使用 list 类型的 pop()
方法。默认情况下,pop()
方法移除并返回列表中的最后一个元素,因此这正好符合栈的行为。例如,我们将栈顶元素移除并返回它:
stack = [1, 2]
top = stack.pop()
print(top) # 输出 2
print(stack) # 输出 [1]
查看栈顶元素
要查看栈顶元素,我们可以使用 list 类型的索引运算符 []
。例如,我们可以查看栈顶元素:
stack = [1, 2]
top = stack[-1]
print(top) # 输出 2
检查栈是否为空
要检查栈是否为空,我们可以使用 list 类型的 __bool__()
魔术方法检查栈的长度是否为 0。例如,我们可以判断栈是否为空:
stack = []
if not stack:
print("栈为空")
else:
print("栈不为空")
示例
现在,我将使用两个示例来说明栈的使用方法。
第一个示例是使用栈反转一个字符串。实现方法是将字符串中的每个字符压入栈中,然后逐个弹出并连接起来,这样就能够反转字符串。
def reverse_string(string):
stack = []
for s in string:
stack.append(s)
result = ""
while stack:
result += stack.pop()
return result
print(reverse_string("Hello, world!")) # 输出 !dlrow ,olleH
第二个示例是使用栈来检查括号是否匹配。实现方法是将每个左括号压入栈中,遇到对应的右括号时从栈中弹出一个左括号。如果左括号与当前右括号匹配,则继续处理;否则,括号不匹配,直接返回 False。
def is_valid_parentheses(string):
stack = []
for s in string:
if s in "([{":
stack.append(s)
elif s in ")]}":
if not stack:
return False
if (s == ")" and stack[-1] == "(") or (s == "]" and stack[-1] == "[") or (s == "}" and stack[-1] == "{"):
stack.pop()
else:
return False
return not stack
print(is_valid_parentheses("()[]{}")) # 输出 True
print(is_valid_parentheses("(]")) # 输出 False
print(is_valid_parentheses("([)]")) # 输出 False
print(is_valid_parentheses("{[()]}")) # 输出 True