详解Python 栈(后进先出)

让我们来详细讲解Python栈(后进先出)的使用方法。

什么是栈

栈(Stack)又称为堆栈,是一种数据结构,是一个只能在一端进行插入和删除操作的线性表。栈按照先进后出的原则存储数据,先进的数据被压入栈底,最后的数据在栈顶。

Python栈语法

在Python中,可以通过list列表来表示一个栈数据结构。入栈即是使用append()方法,出栈则是使用pop()方法。具体语法如下:

# 创建一个空栈
stack = []

# 将元素x入栈
stack.append(x)

# 返回栈顶元素并出栈
stack.pop()

栈的应用举例

栈是一种常用的数据结构,在编程中有很多的应用场景。下面介绍两个栈的应用场景。

圆括号匹配

在编写程序时,我们通常需要检查字符串中的圆括号是否匹配,即左右圆括号的数量是否相等、是否配对等问题。如果采用比较笨拙的方法,需要使用循环和计数器等操作,效率不高,也容易出错。使用栈就能简单、高效地解决这个问题。

下面是圆括号匹配的示例代码:

def is_matched(expr):
    stack = []
    left = ['(', '[', '{']
    right = [')', ']', '}']
    for c in expr:
        if c in left:   # 如果是左括号
            stack.append(c)  # 入栈
        elif c in right:   # 如果是右括号
            if not stack:   # 如果此时栈为空,说明前面没有与其匹配的左括号
                return False
            if right.index(c) != left.index(stack.pop()):  # 判断左右括号是否匹配
                return False
    return not stack   # 最后判断栈中是否还有未匹配的左括号

# 测试
expr = '(([]{}))'
print(is_matched(expr))   # True

expr = '(([{]}))'
print(is_matched(expr))   # False

浏览器历史记录

在浏览器中,当你点击浏览器的“前进”或“后退”按钮时,会让浏览器回到上一个或下一个访问过的网页。实现这个功能需要使用浏览器历史记录栈,每当你访问一个新的网页时,就将其压入栈中。当你点击“前进”或“后退”按钮时,就从历史记录栈中取出对应的网页地址。

下面是浏览器历史记录的示例代码:

class Browser:
    def __init__(self):
        self.history = []   # 初始化历史记录栈
        self.current = None   # 初始化当前网页为空

    def go_to(self, url):
        if self.current != url:   # 如果当前网页与目标网页不同
            self.history.append(self.current)   # 将当前网页入栈
            self.current = url   # 更新当前网页

    def back(self):
        if self.history:   # 如果历史记录栈不为空
            self.current = self.history.pop()   # 取出上一个历史记录

# 测试
browser = Browser()
print(browser.current)   # None

browser.go_to('www.baidu.com')
browser.go_to('www.google.com')
print(browser.history)   # ['www.baidu.com']
print(browser.current)   # www.google.com

browser.back()
print(browser.history)   # []
print(browser.current)   # www.baidu.com

browser.back()
print(browser.history)   # []
print(browser.current)   # www.baidu.com

以上就是栈的使用介绍,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 栈(后进先出) - Python技术站

(2)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • 在python带权重的列表中随机取值的方法

    在Python中,可以通过random.choices方法在带有权重的列表中随机取值,该方法可以根据指定的权重值,生成符合要求的随机数列表。 具体步骤如下: 导入random模块 import random 定义带有权重的列表 假设有一个列表,包含不同的元素和它们的权重值。 my_list = [‘A’, ‘B’, ‘C’, ‘D’] my_weights …

    python 2023年6月3日
    00
  • Django笔记三十三之缓存操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十三之缓存操作 这一节介绍一下如何在 Django 中使用 redis 做缓存操作。 在 Django 中可以有很多种方式做缓存,比如数据库,比如服务器文件,或者内存,这里介绍用的比较多的使用 redis 作为缓存。 这篇笔记主要内容如下: 依赖安装 settings.py 配置 缓存操作用法 …

    python 2023年4月30日
    00
  • python 贪心算法的实现

    下面是关于“Python贪心算法的实现”的完整攻略。 1. 贪心算法简介 贪心算法是一种基于贪心策略的算法,它通过每一步的最优选择,从实现全局最优解。在Python中,贪心算法常用于解决最优化问题,背包问题、最短路径问题等。 2. Python实现贪心算法 2.1 贪心算法的基本思路 贪心算法的基本思路是:一步选择当前状态下的最优解,从而实现全局最优解。贪心…

    python 2023年5月13日
    00
  • Python使用matplotlib绘制三维图形示例

    下面我来详细讲解一下如何使用 Python 中的 matplotlib 库绘制三维图形。 环境搭建 首先,我们需要在本地计算机中安装 matplotlib,可以使用 pip 直接进行安装: pip install matplotlib 安装完成后,我们就可以开始进行三维图形的绘制了。 绘制三维散点图 现在,我们来看一下如何绘制一个三维散点图。代码如下: im…

    python 2023年5月31日
    00
  • 在python中实现求输出1-3+5-7+9-……101的和

    要求输出1-3+5-7+9-……101的和,可以使用Python中的循环和条件语句进行计算。下面是实现该需求的完整攻略: 创建一个变量result,用于存储计算结果并初始化为0。 使用for循环遍历1到101之间的所有奇数,步长为2。 对于每个奇数,使用if语句判断该奇数的下标(从1开始计数)是否为奇数。 如果下标为奇数,说明需要使用加法,将该奇数累…

    python 2023年6月5日
    00
  • Python字符串对齐方法使用(ljust()、rjust()和center())

    当我们在Python程序中进行字符串处理时,经常会遇到需要对字符串进行对齐的情况。Python提供了三个方法ljust()、rjust()和center()来实现字符串左对齐、右对齐和居中对齐。 1. ljust() 方法 ljust() 方法用于将字符串左对齐,并使用空格填充至指定长度。该方法的语法为:str.ljust(width[, fillchar]…

    python 2023年6月5日
    00
  • Python判断是否json是否包含一个key的方法

    判断一个json对象是否包含某个key的方法在Python中有很多种,下面给出两种常见的方法: 使用in关键字 使用in关键字可以非常简单地判断一个json对象是否包含某个key,示例如下: import json data = ‘{"name": "John", "age": 30, "…

    python 2023年6月3日
    00
  • Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能

    首先我们来讲一下 Python + selenium + requests 实现 12306 全自动抢票的攻略。 什么是 Python + selenium + requests Python:一种高级编程语言,常用于数据处理、网络爬虫等领域。 selenium:一个用于自动化测试的工具,可以模拟浏览器的行为操作网页,实现自动化进行网页操作的功能。 requ…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部