-1

我最近一直在使用 Python 中的递归表达式。此类表达式的示例如下所示:

['+', [['*', ['i0','i1']], ['*', ['i2','i3']]]]

我正在尝试将这样的表达式转换为我可以直接计算的东西,例如,

(i0*i1) + (i2*i3)

直观地说,似乎需要某种形式的递归,但是,由于某种原因,我无法解决这个问题。

谢谢!

4

2 回答 2

2

一种也可以处理两个以上操作数的方法:

def transform(e):
    if isinstance(e, str):
        return e
    return '(' + e[0].join(map(transform, e[1])) + ')'

演示:

>>> transform(['+', [['*', ['i0', 'i1']], ['*', ['i2', 'i3', 'i4']]]])
'((i0*i1)+(i2*i3*i4))'
于 2020-08-03T13:13:11.133 回答
1

这是一个可能的解决方案:

def build_expression(x):
    operator = x[0]
    operand1 = x[1][0] if isinstance(x[1][0], str) else '('+build_expression(x[1][0])+')'
    operand2 = x[1][1] if isinstance(x[1][1], str) else '('+build_expression(x[1][1])+')'
    return operand1 + operator + operand2

你可以像这样使用它:

build_expression(['+', [['*', ['i0','i1']], ['*', ['i2','i3']]]])
于 2020-08-03T12:47:53.323 回答