详解Python 栈(后进先出)

  • Post category:Python

Python 栈使用攻略

栈(Stack)是一种具有“后进先出”特性的数据结构。在Python中,使用list类型可以轻易地实现栈的功能。下面详细介绍Python中如何使用栈。

初始化栈

在Python中,可以使用列表来实现栈的数据结构。

stack = []

元素入栈

使用列表的append()来将新元素入栈。

stack.append('A')
stack.append('B')
stack.append('C')

元素出栈

使用列表的pop()方法可以将最后一个元素出栈。

stack.pop()

pop()方法同时可以返回出栈元素的值。

element = stack.pop()

获取栈顶元素

使用Python的负数索引来获取栈顶元素。

top_element = stack[-1]

栈的大小

使用Python的len()函数可以获取栈的大小。

size = len(stack)

判断栈是否为空

使用Python的not关键字来判断栈是否为空。

if not stack:
    # 栈为空的处理逻辑

示例1

下面示例代码演示将字符串反转,使用栈存储每个字符,再逐步出栈展示结果。

s = "Hello World"
stack = list(s)
reversed_s = []

# 将每个字符入栈
for i in range(len(stack)):
    reversed_s.append(stack.pop())

# 依次出栈,构成反转的字符串
for i in range(len(reversed_s)):
    print(reversed_s.pop(), end='')

输出结果:

dlroW olleH

示例2

下面示例代码演示匹配括号是否合法,使用栈存储左括号,匹配到右括号时出栈并判断是否匹配。

def is_valid(s: str) -> bool:
    stack = []
    mappings = {')': '(', '}': '{', ']': '['}

    for c in s:
        if c in mappings:
            if not stack or stack.pop() != mappings[c]:
                return False
        else:
            stack.append(c)

    return not stack

print(is_valid('()[]{}'))  # True
print(is_valid('([)]'))    # False

输出结果:

True
False