Python 比较rpn(后缀)表达式的等效性
如何比较任意两个后缀符号表达式的等效性 在最简单的示例中,foo(a,b)为Python 比较rpn(后缀)表达式的等效性,python,postfix-notation,rpn,Python,Postfix Notation,Rpn,如何比较任意两个后缀符号表达式的等效性 在最简单的示例中,foo(a,b)为 a = [3, 5, 'MUL'] b = [5, 3, 'MUL'] python中的foo()是什么样子?我认为一种方法是计算这两个表达式并以某种方式对它们进行规范化。我希望这是一个定义良好的过程,但还没有找到它 编辑1: 这是一个措辞拙劣的问题。我将尝试使用更好/更多的例子,并感谢您的耐心,因为我试图清楚准确地提出问题 expr1 = [a, b, 'MUL'] expr2 = [b, a, 'MUL']
a = [3, 5, 'MUL']
b = [5, 3, 'MUL']
python中的foo()
是什么样子?我认为一种方法是计算这两个表达式并以某种方式对它们进行规范化。我希望这是一个定义良好的过程,但还没有找到它
编辑1:
这是一个措辞拙劣的问题。我将尝试使用更好/更多的例子,并感谢您的耐心,因为我试图清楚准确地提出问题
expr1 = [a, b, 'MUL']
expr2 = [b, a, 'MUL']
或
因为你已经有了后缀评估。那你就这样吃吧
foo(a,b):
res_a = postfix(a)
res_b = postfix(b)
if res_a = res_b:
return True
return False
我认为这是您正在寻找的最简单的解决方案?在这里,我用一个解决方案尝试了您的问题,它是有效的,如果您有更多的选择,您可以添加:
a = [3, 5, 'MUL']
b = [5, 3, 'MUL']
def postfix_calc(value, z):
return {
'MUL': lambda c: a[0]*a[1],
'ADD': lambda c: a[0]+a[1],
'SUB': lambda c: a[0]-a[1],
'DIV': lambda c: a[0]/a[1]
}.get(value)(z)
def foo(x, y):
val1 = postfix_calc(x[2], x)
val2 = postfix_calc(y[2], y)
if val1 == val2:
return True
else:
return False
print(foo(a,b))
你有计算符号的函数吗?或者你在这里要求这里的人来帮助你创建一个代码吗?我有代码来计算后缀表达式。在原来的问题上添加是否有用的内容。你能添加更多的例子吗?根据一组可能参数的输出来计算表达式并确定等价性似乎并不可靠(我也没有任何证据支持这一说法)。如果我有很多这样的比较要做,添加更多的评估将增加所需的时间。是否还有其他方式来思考这个问题/解决方案?
a = [3, 5, 'MUL']
b = [5, 3, 'MUL']
def postfix_calc(value, z):
return {
'MUL': lambda c: a[0]*a[1],
'ADD': lambda c: a[0]+a[1],
'SUB': lambda c: a[0]-a[1],
'DIV': lambda c: a[0]/a[1]
}.get(value)(z)
def foo(x, y):
val1 = postfix_calc(x[2], x)
val2 = postfix_calc(y[2], y)
if val1 == val2:
return True
else:
return False
print(foo(a,b))