我有一个类似于
的列表a = ['12*b+20*c+30*d']
我继续使用python中的b,c,d
函数替换值replace
通过使用这样的东西
mapping = [ ('b', `float(3)`), ('c', `float(2)`), ('d', `float(1)`)]
for k, v in mapping:
a[0] = a[0].replace(k, v)
然后对它执行一些算术运算。
我希望有一个static list
,保留列表a
,而不是将其更改为
a = ['12*3+20*2+30*1']
答案 0 :(得分:3)
为什么不直接格式化字符串?
l = '12*%d+20*%d+30*%d'%(b, c, d)
实际上,问题是,为什么你甚至把方程式放在一个字符串中?你打算用eval
吗?
你可以把它放在一个函数中:
def calculate(constants, *args):
num = 0
for c, v in zip(constants, *args):
num += c*v
return num
演示:
>>> def calculate(constants, *args):
num = 0
for c, v in zip(constants, args):
num += c*v
return num
>>> calculate([12, 20, 30], b, c, d)
204
等于:
>>> 12 * b + 20 * c + 30 * d
204
甚至,如果常数总是相同的:
def calculate(b, c, d):
return 12 * b + 20 * c + 30 * d