使用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实现电子词典
Apr 23 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
Python 正则表达式实现计算器功能
Apr 29 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python 重命名轴索引的方法
Nov 10 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
python读取ini配置的类封装代码实例
Jan 08 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
python 用递归实现通用爬虫解析器
Apr 16 Python
如何利用pygame实现打飞机小游戏
May 30 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过滤危险html代码的函数
2008/07/22 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
js数组的操作指南
2014/12/28 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python使用socket远程连接错误处理方法
2015/04/29 Python
django 外键model的互相读取方法
2018/12/15 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
C#笔试题
2015/07/14 面试题
幼教毕业生自我鉴定
2014/01/12 职场文书
文明城市标语
2014/06/16 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
工程安全生产协议书
2014/11/21 职场文书
廉政承诺书
2015/01/19 职场文书
高校教师个人总结
2015/02/10 职场文书
学校隐患排查制度
2015/08/05 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python