使用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 命令行参数sys.argv
Sep 06 Python
Python单例模式实例分析
Jan 14 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
python计算auc指标实例
Jul 13 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
Python面向对象类继承和组合实例分析
May 28 Python
python3.x实现base64加密和解密
Mar 28 Python
Python字符串中删除特定字符的方法
Jan 15 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
bat批处理之字符串操作的实现
Mar 16 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编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP XML操作类DOMDocument
2009/12/16 PHP
PHP 模拟$_PUT实现代码
2010/03/15 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php中adodbzip类实例
2014/12/08 PHP
php获取系统变量方法小结
2015/05/29 PHP
js中的string.format函数代码
2020/08/11 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
react-router中的属性详解
2017/06/01 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python requests获取网页常用方法解析
2020/02/20 Python
python判断是空的实例分享
2020/07/06 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
艺术学院毕业生自荐信
2014/07/05 职场文书
党员承诺书范文2015
2015/04/27 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
浅谈react useEffect闭包的坑
2021/06/08 Javascript
Python必备技巧之函数的使用详解
2022/04/04 Python
python manim实现排序算法动画示例
2022/08/14 Python