python版本:3.10
在列表中,append和pop方法有一個特殊的用途??梢栽诹斜砩鲜褂眠@兩個方法讓列表變成一個堆棧使用。
這就是一個棧,它是先進后出,類似單門轎廂電梯一樣的設計,出入口共用
堆棧最有用的應用之一就是做逆波蘭式表達法(RPN)的解釋器。RPN使用后綴表達式,至于人類怎么將自己常用的數(shù)學式轉換為RPN表達式,可以搜本賬號先前發(fā)布的文章《odoo14 | odoo中domain的復雜寫法》中前半部分的基礎教學來學習轉換過程。
使用RPN的好處就是,可以用明確的方式將這兩個操作數(shù)和運算符放在一起而不需要使用括號,例如:
10 5 * 7 3 + /
這個表達式等價于下面的常用表達式(中綴表達式),結果為 5.0:
(10 * 5) / (7+3)
下面是一個實現(xiàn)RPN邏輯的python代碼
the_stack = []
def push(v):
the_stack.append(v)
def pop():
return the_stack.pop()
def main():
s = input('enter rpn string:')
a_list = s.split()
for item in a_list:
if item in '+-*/':
op2 = pop()
op1 = pop()
if item == '+':
push(op1 + op2)
elif item == '-':
push(op1 - op2)
elif item == '*':
push(op1 * op2)
else:
push(op1 / op2)
else:
push(float(item))
print(pop())
main()
# 輸入:2 3 +
# 要有空格
>>> enter rpn string: 2 3 * 4 5 + *
54.0文章來源:http://www.zghlxwxcb.cn/news/detail-442822.html
只要識別到運算符就將堆棧中的倒一和倒二取出并進行運算后再將結果放回,直到運行到最后一個運算符,將堆棧中的最后兩個結果運算后將最終結果放回,執(zhí)行到最后再將堆棧中的唯一存在的結果取出輸出到終端。文章來源地址http://www.zghlxwxcb.cn/news/detail-442822.html
到了這里,關于高階python | 堆棧列表:RPN應用(模擬逆波蘭式功能實現(xiàn))的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!