如何解决在expr中出现括号的循环

时间:2019-05-17 10:11:03

标签: python recursion

这个想法是找到第一个右方括号,然后从最后一个右方括号的输入中删除。

我曾经尝试过递归,但并不太了解。

def complex_evaluation(tokens):
    brackets = ["(", "[", "{", ")", "]", "}"]
    bracketsclose = [")", "]", "}"]
    bracketsopen = ["(", "[", "{"]
    brackpos = []
    for i in range(len(tokens)):
        if tokens[i] in brackets:
            brackpos.append([tokens[i], i])
    while len(brackpos) != 0:
        last = brackpos[0][1]
        for i in brackpos:
            if i[0] in bracketsclose:
                x = simple_evaluation(tokens[last + 1:i[1]])
                del tokens[last:i[1] + 1]
                tokens.insert(last, x)
            last = i[1]
            print(tokens)


complex_evaluation([2, "^", "[", 4, "*", "(", 4, "+", 5, ")", "]", "/", 4])

预期结果应该是没有括号的结果。

IndexError:列表索引超出范围

1 个答案:

答案 0 :(得分:1)

如果我的问题正确,我认为您可以实现:

  

预期结果应该是没有括号的结果。

以更好的方式。您可以执行以下操作:

brackets = ["(", "[", "{", ")", "]", "}"]
result = [x for x in tokens if not x in brackets]

>>> result 
[2, '^', 4, '*', 4, '+', 5, '/', 4]

逻辑:如果某项同时在“令牌”列表和“括号”列表中,则将其忽略,否则将其添加到我们的结果列表中。