2016-09-21 59 views
1

我想任意列表的字符串表示形式轉換回原來的樣表對象,如下面的代碼解釋:轉換爲/獲取原始列表對象從原來的列表對象的字符串表示在python

list1 = [1,2,3,4] 
list1str = str(list1) 
str2list1 = list1str[1:-1].split(",") #stripping off square brackets from [1,2,3,4] and then splitting 
print(list1)  #[1,2,3,4] 
print(str(list1)) #[1,2,3,4] 
print(str2list1) #['1', ' 2', ' 3', ' 4']  
        #Notice that the elements are of string types. 
        #Also there is a prefix empty space in ' 2' (and also in ' 3' and ' 4') 
        # --> I will like str2list1 to be ['1', ' 2', ' 3', ' 4'] 

此外,如果我們處理的嵌套列表:

list2 = [1,2,['a','b'],4] 
list2str = str(list2) 
str2list2 = list2str[1:-1].split(",") 
print(list2)  #[1, 2, ['a', 'b'], 4] 
print(str(list2)) #[1, 2, ['a', 'b'], 4] 
print(str2list2) #['1', ' 2', " ['a'", " 'b']", ' 4'] 
        # --> I will like str2list2 to be [1, 2, ['a', 'b'], 4] 

我怎樣才能得到準確的從它的字符串表示原來的名單?

+0

如果列表項是整數,那麼你還可以利用'地圖(INT,列表1)'在python2.x – dnit13

+0

我懷疑這是一個XY的問題,可以使用解決'json'模塊。 – Kevin

回答

4

你可以試試:

>>> import ast 
>>> ast.literal_eval("[1,2,['a','b'],4]") 
[1, 2, ['a', 'b'], 4] 
1

最簡單的方式,使用的eval()

lst = "[1, 2, 3, 4, ['a', 'b'], 5, 6]" 
newlst = eval(lst) 

所以newlst將是確切的蟒蛇列表中選擇所需

print (newlst) 
# [1, 2, 3, 4, ['a', 'b'], 5, 6] 

有做你想要東西多了一個途徑exec()

exec("newlst = {}".format(lst)) 

Exec將真正把字符串作爲一個python命令/語法。

+0

將這項工作對於其他類型的呢?元組,字典等? – Mahesha999

+0

可以使用任何類型的字符串。只要確保在正確的Python的對象的字符串是實際的表示。 –

+2

@Abhishek您應該使用'ast.literal_eval','eval'是危險的:http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html –

相關問題