我有一个字符串:Python列表字符串列表
s= "[7, 9, 41, [32, 67]]"
,我需要的是字符串转换成一个列表:
l= [7, 9, 41, [32, 67]]
的问题是,当我使用列表(S)我得到这样的:
['[', '7', ',', ' ', '9', ',', ' ', '4', '1', ',', ' ', '[', '3', '2', ',', ' ', '6', '7', ']', ']']
我使用Python 3.2
我有一个字符串:Python列表字符串列表
s= "[7, 9, 41, [32, 67]]"
,我需要的是字符串转换成一个列表:
l= [7, 9, 41, [32, 67]]
的问题是,当我使用列表(S)我得到这样的:
['[', '7', ',', ' ', '9', ',', ' ', '4', '1', ',', ' ', '[', '3', '2', ',', ' ', '6', '7', ']', ']']
我使用Python 3.2
您可以做的正是你用ast.literal_eval()
要求什么:
>>> ast.literal_eval("[7, 9, 41, [32, 67]]")
[7, 9, 41, [32, 67]]
但是,您可能希望首先使用像JSON这样的标准序列化格式,而不是依赖Python对象的字符串表示形式。 (作为一个方面说明,你所拥有的字符串甚至可能是JSON,因为这个特定对象的JSON表示看起来与Python字符串表示相同。由于你没有提到JSON,我假设这不是你曾经使用过的得到这个字符串)
+1正确序列化数据。 – katrielalex
我想这样做,因为我通过套接字将数据作为字符串发送,有没有更好的方法? –
@ParkerHoyes:是的,只要任何适当的序列化更好。查看Python的'json'和'pickle'模块,名称为两个。 –
使用ast
模块,它有一个方便的.literal_eval()
function:
import ast
l = ast.literal_eval(s)
蟒提示:
>>> import ast
>>> s= "[7, 9, 41, [32, 67]]"
>>> ast.literal_eval(s)
[7, 9, 41, [32, 67]]
你想用ast.literal_eval
:
import ast
s= "[7, 9, 41, [32, 67]]"
print ast.literal_eval(s)
# [7, 9, 41, [32, 67]]
用途: 包AST:功能:literal_eval(node_or_string)
这是另一种答案,但我不建议你。因为exec
是危险的。
>>> s= "[7, 9, 41, [32, 67]]"
>>> try:
... exec 'l = ' + s
... l
... except Exception as e:
... e
[7, 9, 41, [32, 67]]
为什么不使用eval()
?
>>> s = "[7, 9, 41, [32, 67]]"
>>> eval(s)
[7, 9, 41, [32, 67]]
该字符串的格式是什么? JSON?蟒蛇?其他? – 2012-09-16 14:27:07
你得到你要做的原因是字符串是可迭代的,字符作为条目。如果你传递一个可迭代的'list',它会给你一个包含iterable条目的列表。 – katrielalex