使用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中使用HTMLParser解析html实例
Feb 08 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
python中kmeans聚类实现代码
Feb 23 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
Pandas加速代码之避免使用for循环
May 30 Python
python playwright之元素定位示例详解
Jul 23 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生成数组的使用示例 php全组合算法
2014/01/16 PHP
preg_match_all使用心得分享
2014/01/31 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
IE 当eval遇上function的处理
2011/08/09 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
js变换显示图片的实例
2013/04/16 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python pymysql库的常用操作
2020/10/16 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
Java里面如何创建一个内部类的实例
2015/01/19 面试题
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
社区国庆节活动总结
2015/03/23 职场文书
小人国观后感
2015/06/11 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书