使用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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
python网络编程之数据传输UDP实例分析
May 20 Python
Python生成随机验证码的两种方法
Dec 22 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
django页面跳转问题及注意事项
Jul 18 Python
详解python pandas 分组统计的方法
Jul 30 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
Python Flask异步发送邮件实现方法解析
Aug 01 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如何调用webservice应用介绍
2012/11/24 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
你真的了解JavaScript吗?
2007/02/24 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
js的各种排序算法实现(总结)
2016/07/23 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
代码实例讲解python3的编码问题
2019/07/08 Python
Django缓存系统实现过程解析
2019/08/02 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
异常和异常类的概念
2014/09/12 面试题
空中乘务员岗位职责
2014/03/08 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
Python数据分析之pandas读取数据
2021/06/02 Python
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript