作家
登录

Python算法实战系列:栈

作者: 来源: 2017-05-26 14:04:49 阅读次 我要评论

计算一个表达式时,编译器平日应用后缀表达式,这种表达式不须要括号:  

编写法度榜样实现后缀表达式求值函数。

思路

  1. 建立一个栈来存储待计算的操作数;
  2. 遍历字符串,碰到操作数则压入栈中,碰到操作符号则出栈操作数(n次),进行响应的计算,计算结不雅是新的操作数压回栈中,等待计算
  3. 按上述过程,遍历完全个表达式,栈中只剩下最终结不雅;

解决代码

  1. #!/use/bin/env python 
  2.  
  3. # _*_ coding:utf-8 _*_ 
  4.  
  5. operators = {  # 运算符操作表 
  6.  
  7.     '+': lambda op1, op2: op1 + op2, 
  8.  
  9.     '-': lambda op1, op2: op1 - op2, 
  10.  
  11.     '*': lambda op1, op2: op1 * op2, 
  12.  
  13.     '/': lambda op1, op2: op1 / op2, 
  14.  
  15. } 
  16.  
  17. def evalPostfix(e): 
  18.  
  19.     """ 
  20.  
  21.     :param e: 后缀表达式 
  22.  
  23.     :return: 正常情况下栈内的第一个元素就是计算好之后的值 
  24.  
  25.     """ 
  26.  
  27.     tokens = e.split()  # 把传过来的后缀表达式切分成列表 
  28.  
  29.     stack = [] 
  30.  
  31.     for token in tokens:  # 迭代列表中的元素 
  32.  
  33.         if token.isdigit():  # 如不雅当前元素是数字 
  34.  
  35.             stack.append(int(token))  # 就追加到栈里边 
  36.  
  37.         elif token in operators.keys():  # 如不雅当前元素是操作符 
  38.  
  39.             f = operators[token]  # 获取运算符操作表中对应的lambda表达式 
  40.  
  41.             op2 = stack.pop()  # 根据先辈后出的原则,先让第二个元素出栈 
  42.  
  43.             op1 = stack.pop()  # 在让第一个元素出栈 
  44.  
  45.             stack.append(f(op1, op2))  # 把计算的结不雅在放入到栈内 
  46.  
  47.     return stack.pop()  # 返回栈内的第一个元素 
  48.  
  49. result = evalPostfix('2 3 4 * +') 

      推荐阅读

      “互联网+”让出租车更智慧

    走进淮北市运输治理处信息批示中间,一幅由6块液晶显示屏构成的监控屏幕映入眼帘,经由过程屏幕画面可以清楚地看到全市在运行出租车的及时地位和车内人员的音视频信息。批示中间以每周7日>>>详细阅读


    本文标题:Python算法实战系列:栈

    地址:http://www.17bianji.com/lsqh/35452.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)