2016-09-21 61 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 –

相关问题