这个想法是找到第一个右方括号,然后从最后一个右方括号的输入中删除。
我曾经尝试过递归,但并不太了解。
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:列表索引超出范围
答案 0 :(得分:1)
如果我的问题正确,我认为您可以实现:
预期结果应该是没有括号的结果。
以更好的方式。您可以执行以下操作:
brackets = ["(", "[", "{", ")", "]", "}"]
result = [x for x in tokens if not x in brackets]
>>> result
[2, '^', 4, '*', 4, '+', 5, '/', 4]
逻辑:如果某项同时在“令牌”列表和“括号”列表中,则将其忽略,否则将其添加到我们的结果列表中。