使用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中的jquery PyQuery库使用小结
May 13 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
快速了解python leveldb
Jan 18 Python
Django中反向生成models.py的实例讲解
May 30 Python
python 实现selenium断言和验证的方法
Feb 13 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Python递归调用实现数字累加的代码
Feb 25 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python绘制简单彩虹图
2018/11/19 Python
python实现flappy bird游戏
2018/12/24 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
简单的Python人脸识别系统
2020/07/14 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
基层党建工作汇报材料
2014/08/15 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL