Python. 将字符串'+'转换为数学运算

1 投票
7 回答
528 浏览
提问于 2025-04-16 05:35

如何把字符串('+')转变成数学运算?

a = [0,1,2] # or a = ['0','1','2']
b = ['+','-','*']
c = int(a[0]+b[0]+a[1])

换句话说,怎么把 str('-1*2') 转换成 int(),而不需要用 for i in c: if i == '+': ... 这种方式?谢谢。

7 个回答

2

如果你的数学表达式可以用Python的语法写,但你对使用eval感到害怕(这其实是有理由的),你可以看看Python的ast模块(文档)。这个模块可以把你的表达式解析成一个抽象语法树,你可以对这个树进行遍历。这样,你就可以只计算Python的一小部分内容,并且如果遇到不符合你表达式规则的东西,就会抛出错误。

4

你还可以使用操作符模块:

import operator as op
#Create a mapping between the string and the operator:
ops = {'+': op.add, '-': op.sub, '*': op.mul}

a = [0,1,2]
b = ['+','-','*']

#use the mapping
c = ops[b[0]](a[0], a[1])
2

我觉得你可能在找 eval(),不过我建议你用别的方法...

>>> eval('-1*2')
-2

eval 会把你传给它的字符串当成代码来执行,所以这其实很危险,特别是当这些参数是用户输入的时候...

在这种情况下,我建议你使用解析库,比如 ply http://www.dabeaz.com/ply/,这个库用起来非常简单,而且效果很好 :)

撰写回答