如何在python中替换方程中的变量

时间:2012-10-06 18:35:46

标签: python equation replace

我有一些方程式的字符串,包括变量。例如:

eq='(a+1)*c-d'

此外,我还有包含变量值的字典。例如:

val={'a':5,'c':'k','d':'300n'}

正如你可以看到,在相同的情况下,变量的值可以是其他变量,在某些情况下,并非所有来自eq的变量都在val中。

我需要用val中的值替换eq中的所有变量。 原因直接代码将是:

for v in val.keys():
  eq=re.sub(v,val[v],eq)

但是这些代码在某些情况下会失败。例如,当变量列表中的变量为“n”和“nn”

那么,有人可以考虑更好的解决方案吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

尝试:

for k,v in val.items():
    eq = re.sub(r'\b' + k + r'\b', v, eq)

这将按其全名搜索变量,即如果val = {'x': '5'}和等式包含子串如“xx”,“x2”或甚至“2x”,则不会替换这些字符串。

答案 1 :(得分:0)

另一种方法需要围绕一个smidge更改公式,并使用字符串函数'format'。

使用关键字参数(不是非常程序化的):

>>> '({a}+1)*{c}-{d}'.format(a=5, c='k', d='300n')
'(5+1)*k-300n'

或者使用词典:

>>> '({a}+1)*{c}-{d}'.format(**{'a': 5, 'c': 'k', 'd': '300n'})
'(5+1)*k-300n'

这样做可以帮助用户识别什么时候没有被替换,或者意图被替换,并且可以简化代码。