使用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的内存泄漏及gc模块的使用分析
Jul 16 Python
python如何获取服务器硬件信息
May 11 Python
pandas数据分组和聚合操作方法
Apr 11 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
Python实现的简单排列组合算法示例
Jul 04 Python
opencv python 傅里叶变换的使用
Jul 21 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
python异常处理和日志处理方式
Dec 24 Python
Python configparser模块应用过程解析
Aug 14 Python
Scrapy 配置动态代理IP的实现
Sep 28 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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
js实现小时钟效果
2020/03/25 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
详解Python进程间通信之命名管道
2017/08/28 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
创业计划书中要认真思考的问题
2013/12/28 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
幼儿园家长评语
2014/02/10 职场文书
房地产开盘策划方案
2014/02/10 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS