假设我有一个这样的字符串:
s="b a[1] something funny"
我有这些变量
b="10"
a=["1","is"]
我是否有可能以某种方式用我的变量中的值替换第一个字符串中的值,希望使用一个函数。我不想用eval执行字符串,因为它包含无效的Python代码。
答案 0 :(得分:2)
s="b sx[1] something funny"
b="10"
sx=["1","is"]
map = {}
for i in range(0,len(sx)):
map["sx["+str(i)+"]"]=sx[i]
map['b'] = b
lis = s.split(" ")
ans = []
for i in range(0,len(lis)):
try:
ans.append(map[lis[i]])
except Exception, e:
ans.append(lis[i])
ans = " ".join(ans)
print ans
希望这有帮助
答案 1 :(得分:1)
您可以使用这种格式:
s = '{b} {a} something funny'.format(b="10", a=["1","is"])
答案 2 :(得分:1)
这样做,至少在你的例子上是这样做的:
b="10"
a=["1","is"]
def protectedEval(mystr):
ret = []
for i in mystr.split():
try:
ret.append(eval(i))
except NameError:
ret.append(i)
return ' '.join(ret)
protectedEval("b a[1] something funny")
但你可能应该使用.format或%。
答案 3 :(得分:0)
在尚未发布的Python 3.6中,您可以使用Literal String Interpolation。例如:
>>> b = "10"
>>> a = ["1", "is"]
>>> s = f"{b} {a[1]} something funny"
>>> print(s)
10 is something funny
答案 4 :(得分:0)
如果您可以将字符串模板转换为'formattable',那么这应该有效:
s="{b} {a[1]} something funny"
b="10"
a=["1","is"]
print s.format(**locals())
10 is something funny
虽然您应该避免使用locals()
支持隐式字典:
s="{b} {a[1]} something funny"
parms = dict(
b="10",
a=["1","is"]
)
print s.format(**parms)
10 is something funny