我有一個字符串: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