使用Python实现一个栈判断括号是否平衡


Posted in Python onAugust 23, 2018

栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top)。 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里面添加盘子的时候,也是放在最上面,处在底部的盘子,你可能永远也用不到。 栈的最常见操作,有如下两个:

push(a) # 压入,将a压入的栈中
pop() # 弹出,将栈的最后一个元素弹出

可是使用Python的列表数据结构,来模拟栈的操作,使用 append 来模拟 push ,使用列表的 pop 来模拟栈的 pop ,但是这样做有一个弊端,那就是列表原本自带的操作方法同样能够使用,可能会造成混乱。

栈的实现 下面就通过借助Python的列表,来自定义一个栈类:

class Stack(object):
  """使用数组实现一个栈"""
  def __init__(self):
    self.data = []
  def push(self, num):
    """压栈操作"""
    self.data.append(num)
  def pop(self):
    """返回从栈中弹出的元素, 当栈为空的时候, 抛出IndexError"""
    return self.data.pop()
  def peek(self):
    """查看当前栈顶的元素, 当栈为空的时候, 抛出IndexError"""
    return self.data[-1]
  def __len__(self):
    """返回栈的长度, 调用len(obj)时会自动调用obj对象的__len__方法"""
    return len(self.data)
  def isEmpty(self):
    """判断栈是否为空"""
    return True if len(self.data)==0 else False
  def clear(self):
    """清空栈"""
    self.data = []
  def __repr__(self):
    """当前对象的表现形式, 在终点直接键入对象时会调用"""
    return 'Stack_' + str(self.data)
  def __str__(self):
    """当前对象的字符串表示, 使用print(obj)时会调用"""
    return 'Stack_' + str(self.data)

以上代码实现了一个简单的基于列表的栈。

栈的应用 栈应用的一个很典型的例子,就是检查括号是否匹配。 例如: 每一个开始的 [ 后面,都应该跟着一个位置正确的 ] ,并且每一个 ( 后面,也应该跟着一个位置正确的结束的 ) .

(...)...(...)
(...)...(...
)...((...)
def isBalance(text):
  """栈的应用,检查括号是否平衡"""
  result_stack = Stack()
  for i in text:
    if i in ['{', '[', '(']:
      result_stack.push(i)
    elif i in ['}', ']', ')']:
      # 遇到结束括号的情况
      if result_stack.isEmpty():
        # 如果当前栈为空, 不匹配,返回False
        return False
      chFromStack = result_stack.pop()
      if not ((chFromStack == '{' and i == '}' )
          or (chFromStack == '[' and i == ']')
          or (chFromStack == '(' and i == ')')):
        # 如果不满足匹配条件, 则返回False
        return False
  # 遍历结束后, 如果结果栈为空, 则代表括号匹配, 栈不为空, 括号不匹配
  return result_stack.isEmpty()

补充:Python中的栈

在python中,个人理解为栈可以用列表来代替

服从FILO:First In Last Out

其中入栈为(利用append函数)

stack = []
stack.append(<item>)

出栈为(利用pop函数)

stack.pop(-1) #stack.pop()也可

服从FIFO:First In First Out

入栈为:

stack = []
stack.append(<item>)

出栈为:

stack.pop(0)

总结

以上所述是小编给大家介绍的使用Python实现一个栈判断括号是否平衡,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
跟老齐学Python之再深点,更懂list
Sep 20 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
sublime text 3配置使用python操作方法
Jun 11 Python
pytorch构建网络模型的4种方法
Apr 13 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
kali中python版本的切换方法
Jul 11 Python
python 命令行传入参数实现解析
Aug 30 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
python中rc1什么意思
Jun 19 Python
Python函数调用追踪实现代码
Nov 27 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 #Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 #Python
Django 限制用户访问频率的中间件的实现
Aug 23 #Python
浅谈Django的缓存机制
Aug 23 #Python
如何在python字符串中输入纯粹的{}
Aug 22 #Python
关于python列表增加元素的三种操作方法
Aug 22 #Python
Python Learning 列表的更多操作及示例代码
Aug 22 #Python
You might like
php 静态页面中显示动态内容
2009/08/14 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
python 测试实现方法
2008/12/24 Python
进一步探究Python中的正则表达式
2015/04/28 Python
Python的re模块正则表达式操作
2016/05/25 Python
使用python实现tcp自动重连
2017/07/02 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Python用input输入列表的实例代码
2020/02/07 Python
python实现五子棋程序
2020/04/24 Python
python连接mysql有哪些方法
2020/06/24 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
python实现简易自习室座位预约系统
2021/06/30 Python
Java实现聊天机器人完善版
2021/07/04 Java/Android