我如何打印字符串列表作为其各自的变量值?
例如,请使用以下代码:
a=1
b=2
c=3
text="abc"
splittext = text.split(text)
print(splittext)
如何输出123
?
答案 0 :(得分:3)
您可以使用eval
执行此操作,但非常危险:
>>> ''.join(map(lambda x : str(eval(x)),Text))
'123'
eval
(或许他们最好将其重命名为evil
,没有任何难过的感觉,只需将其用作警告)评估字符串,就像您自己编写它一样。因此eval('a')
将获取a
的值。问题是,黑客可能会找到一些技巧来使用它来注入任意代码,从而破解你的服务器,程序等。此外,它可能会改变程序的状态。所以一条建议是“不要使用它,除非你绝对没有其他选择”(这不是这里的情况)。
或者一个不那么危险的变种:
>>> ''.join(map(lambda x : str(globals()[x]),Text))
'123'
如果这些是全局变量(您可以将locals()
用于局部变量)。
这是丑陋并且很危险,因为你事先并不知道a
,b
和c
是什么,你也没有太多控制权程序的哪个部分可以设置这些变量。所以它可能允许代码注入。正如您对问题的评论中所做的那样,您最好使用字典。
更好的方法是使用字典(如@Ignacio Vazquez-Abrams所说):
>>> dic = {'a':1,'b': 2,'c':3}
>>> ''.join(map(lambda x : str(dic[x]),Text))
'123'
在上面我们使用lambda-expression中的str
将内容转换为字符串,并使用''.join
来连接这些字符串。如果您对一系列“结果”感兴趣,可以删除这些结构。例如:
>>> map(lambda x : dic[x],Text)
[1, 2, 3]
对于上述所有例子都是一样的。
修改强>
出于某种原因,我后来发现你要打印 valuesm这一事实,这可以通过list comprehension轻松实现:
for x in Text :
print dic[x]
再次,您可以对上述情况使用相同的技术。
答案 1 :(得分:2)
如果您想要打印出字符串中指定的变量的值,可以使用locals
(或globals
,具体取决于您希望它们的位置/地点)
>>> a=1
>>> b=2
>>> c=3
>>> s='abc'
>>> for v in s:
... print(locals()[v])
...
1
2
3
或者,如果在字符串中使用分隔符
>>> s='a,b,c'
>>> for v in s.split(','):
... print(locals()[v])
...
1
2
3