如何从python列表中计算数学问题?

时间:2019-02-10 13:44:56

标签: python list math

我在python中有一个看起来像这样的列表:

list = [5, "-", 4, "*", 8]

我想计算列表中的数学问题,所以:

anwser = 5 - 4 * 8

因此变量“ anwser”为-27。

3 个答案:

答案 0 :(得分:2)

这就是您称为中缀符号(https://en.wikipedia.org/wiki/Infix_notation

您可以使用堆栈进行评估。我在这里找到了要点(https://gist.github.com/nava45/6333409#file-infix-expression-evaluation

答案 1 :(得分:2)

以运算优先级评估方程式需要解析器。

幸运的是,无需使用解析工具即可相当简单地为基本算术(即加法和乘法)编写解析器。

代码

import operator

ops = {
    '-': operator.sub,
    '+': operator.add,
    '*': operator.mul,
    '/': operator.truediv
}

def parse_mult(equation):
    equation = iter(equation)
    value = next(equation)
    for token in equation:
        if token == '*' or token == '/':
            op = ops[token]
            value = op(value, next(equation))
        else:
            yield value
            yield token
            value = next(equation)
    yield value

def parse(equation):
    equation = parse_mult(equation)
    value = next(equation)
    for token in equation:
        op = ops[token]
        value = op(value, next(equation))
    return value

示例

equation_list = [5, "-", 4, "*", 8]
print(parse(equation_list))

输出

-27

如果您需要解析具有两个以上优先级的方程式,那么可能就不需要外部解析工具。

答案 2 :(得分:1)

这将起作用:

eval(''.join([str(x) for x in list]))

但是be careful使用eval