2015-11-27 44 views
-2

現在我有一個這樣的字符串:Python數據陣列字符串轉換成列出

data = "[[1,'00007',0.19],[2,'00008',0.29],[3,'00009',0.49],[4,'00010',0.59]]" 

print(type(data)) 

<class 'str'> 

在Python這就像數據陣列,但是它是一個字符串,現在我想這個字符串轉換爲真實數據陣列<class 'list'>,我應該怎麼做這個

+0

看看https://stackoverflow.com/questions/743806/split-string-into-a-list-in-python靈感。 –

+0

你如何得到'數據'?也許你不應該將數組轉換爲字符串? – furas

回答

2

你可以做

eval(data) 

解析其內容。

+1

使用'eval'被認爲是不好的 – The6thSense

+1

這是不安全的,你說得對。簡單地取決於應用程序 - 如果在沒有用戶交互的小腳本中使用,它應該不是問題,我會說。 – elzell

+1

只是想添加它,因爲OP應該知道何時使用它:) – The6thSense

2

使用ast.literal_eval:如文檔says-

安全評估的表達式節點或Unicode或Latin-1的編碼含有一個Python字面或容器顯示 字符串。字符串,數字,元組,列表,http://stardict.sourceforge.net/Dictionaries.php下載,布爾值,和 無:提供可以僅由下面的Python字面 結構

的字符串或 節點。

>>> import ast 

>>> data = "[[1,'00007',0.19],[2,'00008',0.29],[3,'00009',0.49],[4,'00010',0.59]]" 
>>> ast.literal_eval(data) 
[[1, '00007', 0.19], [2, '00008', 0.29], [3, '00009', 0.49], [4, '00010', 0.59]] 

>>> print(type(ast.literal_eval(data))) 
>>> <type 'list'> 

避免使用eval,除非真正需要的。詳情at

0

從數據的定義繼:

data_list = data.replace("[","").replace("]","").replace("'","").split(",") 
new_list = [data_list[x:x+3] for x in range(0, len(data_list), 3)] 

雖然事情在現在的結果是一個字符串。