Python 列表字符串转列表

3

我有一个字符串:

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


这个字符串是什么格式的?JSON?Python?还是其他的? - user1675187
1
你得到的结果是因为字符串是可迭代的,它们的字符作为条目。如果你将一个可迭代对象传递给 list,它会返回一个包含可迭代对象中所有条目的列表。 - Katriel
6个回答

4
您可以使用ast.literal_eval()来完成您所需的操作:
>>> ast.literal_eval("[7, 9, 41, [32, 67]]")
[7, 9, 41, [32, 67]]

然而,你可能希望首先使用一种合理的序列化格式,比如JSON,而不是依赖于Python对象的字符串表示形式。(顺便说一句,你所拥有的字符串甚至可能是JSON,因为此特定对象的JSON表示形式看起来与Python字符串表示形式相同。既然你没有提及JSON,我假设这不是你用来获取此字符串的方式。)


我正在尝试这样做,因为我正在通过套接字发送数据作为字符串,有更好的方法吗? - Parker Hoyes
1
@ParkerHoyes:是的,任何适当的序列化都更好。可以看看Python的jsonpickle模块,这只是其中两个例子。 - Sven Marnach

2
使用ast模块,它有一个方便的.literal_eval()函数
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
您想使用ast.literal_eval
import ast
s= "[7, 9, 41, [32, 67]]"
print ast.literal_eval(s)
# [7, 9, 41, [32, 67]]

0

0

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

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

0

为什么不使用eval()

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接