要列出的Python列表字符串

时间:2012-09-16 14:24:31

标签: python

我有一个字符串:

s= "[7, 9, 41, [32, 67]]"

我需要将该字符串转换为列表:

l= [7, 9, 41, [32, 67]]

问题是,当我使用list(s)时,我得到了这个:

['[', '7', ',', ' ', '9', ',', ' ', '4', '1', ',', ' ', '[', '3', '2', ',', ' ', '6', '7', ']', ']']

我正在使用python 3.2

6 个答案:

答案 0 :(得分:4)

可以使用ast.literal_eval()完全按照您的要求执行操作:

>>> ast.literal_eval("[7, 9, 41, [32, 67]]")
[7, 9, 41, [32, 67]]

但是,您可能希望首先使用像JSON这样的理智的序列化格式,而不是依赖于Python对象的字符串表示。 (作为旁注,你拥有的字符串甚至可能是JSON,因为这个特定对象的JSON表示看起来与Python字符串表示相同。因为你没有提到JSON,我假设这不是你习惯的得到这个字符串。)

答案 1 :(得分:2)

使用ast模块,它有一个方便的.literal_eval() function

import ast

l = ast.literal_eval(s)

在python提示符上:

>>> import ast
>>> s= "[7, 9, 41, [32, 67]]"
>>> ast.literal_eval(s)
[7, 9, 41, [32, 67]]

答案 2 :(得分:2)

您想使用ast.literal_eval

import ast
s= "[7, 9, 41, [32, 67]]"
print ast.literal_eval(s)
# [7, 9, 41, [32, 67]]

答案 3 :(得分:0)

使用: package ast:function:literal_eval(node_or_string)

http://docs.python.org/library/ast.html#module-ast

答案 4 :(得分:0)

这是另一个答案,但我不建议你。因为exec很危险。

>>> s= "[7, 9, 41, [32, 67]]"
>>> try:
...   exec 'l = ' + s
...   l
... except Exception as e:
...   e
[7, 9, 41, [32, 67]]

答案 5 :(得分:0)

为什么不使用eval()

>>> s = "[7, 9, 41, [32, 67]]"
>>> eval(s)
[7, 9, 41, [32, 67]]