2013-11-01 4 views
2

Я только начал играть с python. Я знаю, что мы можем преобразовать любой список в строку, используя ул() Как:преобразовать строку 2d список обратно в 2d-список в python

>>> l = [[1,1] , [2,2] , [3,3]] 
>>> l 
[[1, 1], [2, 2], [3, 3]] 
>>> type(l) 
<type 'list'> 
>>> str(l) 
'[[1, 1], [2, 2], [3, 3]]' 
>>> list_string = str(l) 
>>> list_string 
'[[1, 1], [2, 2], [3, 3]]' 
>>> type(list_string) 
<type 'str'> 

Есть ли способ, чтобы преобразовать list_string обратно в 2d списка ?? В принципе, есть функция, чтобы преобразовать это обратно в свою первоначальную форму?

old_list = magic_conversion_func(list_string) 

>>>old_list 
[[1, 1], [2, 2], [3, 3]] 

Я попытался list(), но преобразует каждый символ в строку в новый элемент списка.

>>> list(list_string) 
['[', '[', '1', ',', ' ', '1', ']', ',', ' ', '[', '2', ',', ' ', '2', ']', ',', ' ', '[', '3', ',', ' ', '3', ']', ']'] 

это не то, что я хочу

+5

Использование 'импорта аст; ast.literal_eval (list_string) ' –

ответ

3

Использование ast.literal_eval

>>> list_string = '[[1, 1], [2, 2], [3, 3]]' 
>>> import ast 
>>> type(ast.literal_eval(list_string)) 
<type 'list'> 
+0

Ум ... Я отправляю слишком медленно. Ответ Дэвида Робинсона прав. –

1

использованием eval

>>> l = [[1,1] , [2,2] , [3,3]] 
>>> list_string = str(l) 
>>> eval(list_string) 
[[1, 1], [2, 2], [3, 3]] 

но eval следует использовать с осторожностью, не так ли? a thread on eval safety.

Это работает, как хорошо, близко к тому, что вы пытались с list:

import numpy as np 
print np.array(list_string) 
Смежные вопросы