使用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 流程控制实例代码
Sep 25 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
在Python中使用gRPC的方法示例
Aug 08 Python
python用插值法绘制平滑曲线
Feb 19 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
Django实现文件上传下载功能
Oct 06 Python
使用pth文件添加Python环境变量方式
May 26 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
Python实现播放和录制声音的功能
Aug 12 Python
Python pymsql模块的使用
Sep 07 Python
jupyter notebook快速入门及使用详解
Nov 13 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/07/20 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php时间函数用法分析
2016/05/28 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
vue源码nextTick使用及原理解析
2019/08/13 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python最长公共子串算法实例
2015/03/07 Python
python获取list下标及其值的简单方法
2016/09/12 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
口头翻译求职人自荐信
2013/12/07 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
python热力图实现的完整实例
2022/06/25 Python