python面试 -- 数据处理
来源:互联网 发布:如何打开防火墙端口 编辑:程序博客网 时间:2024/06/02 06:53
题目要求:
判断给出的字符串中的括号是否合理,若合理,将括号里面的括号删除,其他内容不变,并返回
# -*- coding: utf8 -*-class manager(object): def __init__(self): self.symbols_location = list() self.symbols_count = list() def islegal(self, s): ''' 判断给出的字符串中括号是否合法 :param s: 字符串 :return: True or False ''' SYMBOLS = {'}': '{', ']': '[', ')': '('} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys() arr = [] for c in s: if c in SYMBOLS_L: # 左符号入栈 arr.append(c) elif c in SYMBOLS_R: # 右符号要么出栈,要么匹配失败 if arr and arr[-1] == SYMBOLS[c]: arr.pop() else: return False return not arr def check_symbol_location(self, str): ''' 检查出所有左括号和右括号的位置 左括号计数加1,右括号计算减一,将每次的计数都记录下来,[1, 0]表示刚好出现了成对括号() :param str: 给出的字符串 :return: ''' count = 0 for i in range(len(str)): if str[i] == '(': self.symbols_location.append(i) count += 1 self.symbols_count.append(count) elif str[i] == ')': self.symbols_location.append(i) count -= 1 self.symbols_count.append(count) def symbol_clear_index(self): ''' 遍历括号计算列表,若括号为包含关系时,列表中连续2个值一定是左边的值大于右边的值,且右边的值不等于0 :return: 找出括号包含关系时,子括号在字符串中的索引位置 ''' for i in range(len(self.symbols_count)-1): if self.symbols_count[i] > self.symbols_count[i+1] and self.symbols_count[i+1]: index = [self.symbols_location[i], self.symbols_location[i+1]] del self.symbols_location[i] del self.symbols_location[i] del self.symbols_count[i] del self.symbols_count[i] return index def data_manager(self, str): if self.islegal(str): s = '' all_del_symbol = list() self.check_symbol_location(str) symbol_index = self.symbol_clear_index() while symbol_index: # 循环判断返回的值,若为真,再次调用symbol_clear_index(),直到返回的索引为空 all_del_symbol.extend(symbol_index) # 将每次返回的需要删除的括号在字符串中的索引位置记录下来 symbol_index = self.symbol_clear_index() for k, v in enumerate(str): # 遍历字符串的位置k和值v,将不在需要删除列表中的值记录下来 if k not in all_del_symbol: s += v return '整理后结果为: %s'%s else: return '该字符串的括号不合法'if __name__ == "__main__": manager = manager() print(manager.data_manager("1 - 2*(17-(60-30+(-40*2/5)*9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)")) print(manager.data_manager("1 - 2*(17-(60-30+(-40*(2)/5)*9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)")) print(manager.data_manager("1 - 2*(17-60)-30+(-40*2/"))
返回结果如下:
整理后结果为: 1 - 2*(17-60-30+-40*2/5*9-2*5/3+7/3*99/4*2998+10*568/14)-(-4*3)/(16-3*2)
整理后结果为: 1 - 2*(17-60-30+-40*2/5*9-2*5/3+7/3*99/4*2998+10*568/14)-(-4*3)/(16-3*2)
该字符串的括号不合法
阅读全文
1 0
- python面试 -- 数据处理
- Python 数据处理
- Python数据处理
- python数据处理
- python数据处理
- python 数据处理
- python数据处理
- python数据处理
- Python 数据处理
- 大数据处理面试汇总
- 大数据处理面试汇总
- 大数据处理面试汇总
- [2016面试]海量数据处理
- 程序员面试海量数据处理
- 面试:十题大数据处理
- 海量数据处理(面试)
- 面试中的海量数据处理问题!
- 面试中的海量数据处理问题
- 微信支付后台接口开发(扫码版)
- 本地安装docker
- 树的最小深度
- platform设备驱动全透析
- mapper.xml文件介绍
- python面试 -- 数据处理
- 如何将 iOS 项目的编译速度提高5倍
- 有人可以解释一下YANG,NETCONF,RESTCONF,XML之间的关系吗?
- liunx 下使用安装lnmp 到zabbix编译安装
- 类加载机制详解
- oracle学习之光标
- Similarity Metric Learning for Face Recognition2013
- 守护进程
- jQuery Animate