使用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通过apply使用元祖和列表调用函数实例
May 26 Python
Python切片工具pillow用法示例
Mar 30 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
python re的findall和finditer的区别详解
Nov 15 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
python用opencv 图像傅里叶变换
Jan 04 Python
学会Python数据可视化必须尝试这7个库
Jun 16 Python
浅谈哪个Python库才最适合做数据可视化
Jun 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中的一些数组排序方法分享
2012/07/20 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
PHP实现递归的三种方法
2020/07/04 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
Python中的列表知识点汇总
2015/04/14 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
Pandas中resample方法详解
2019/07/02 Python
python识别验证码图片实例详解
2020/02/17 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
Python 没有main函数的原因
2020/07/10 Python
Django数据库迁移常见使用方法
2020/11/12 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
国外的一些J2EE面试题一
2012/10/13 面试题
共产党员岗位承诺书
2014/05/29 职场文书
先进教师事迹材料
2014/12/16 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL