2012-09-16 115 views
3

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

+0

該字符串的格式是什麼? JSON?蟒蛇?其他? – 2012-09-16 14:27:07

+1

你得到你要做的原因是字符串是可迭代的,字符作爲條目。如果你傳遞一個可迭代的'list',它會給你一個包含iterable條目的列表。 – katrielalex

回答

4

可以做的正是你用ast.literal_eval()要求什麼:

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

但是,您可能希望首先使用像JSON這樣的標準序列化格式,而不是依賴Python對象的字符串表示形式。 (作爲一個方面說明,你所擁有的字符串甚至可能是JSON,因爲這個特定對象的JSON表示看起來與Python字符串表示相同。由於你沒有提到JSON,我假設這不是你曾經使用過的得到這個字符串)

+0

+1正確序列化數據。 – katrielalex

+0

我想這樣做,因爲我通過套接字將數據作爲字符串發送,有沒有更好的方法? –

+1

@ParkerHoyes:是的,只要任何適當的序列化更好。查看Python的'json'和'pickle'模塊,名稱爲兩個。 –

2

使用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]] 
2

你想用ast.literal_eval

import ast 
s= "[7, 9, 41, [32, 67]]" 
print ast.literal_eval(s) 
# [7, 9, 41, [32, 67]] 
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]]