我有一个非常奇怪的问题......我的数据集实际上有一些列表 字符串。反正有没有让他们再次列出?
例如我有一个字符串b,如
In [47]: b
Out[47]: "['right', 'wrong']"
但我只想['正确','错''),我该怎么做?
我试过
In [48]:list(b)
Out[48]: ['[',"'",'r','i','g','h','t',"'",',',' ',"'",'w','r','o','n','g',"'",']']
这是正常的,因为如果列表应用于字符串....它将它分开。我知道 但我不知道如何将它们转换回列表。
非常感谢,如果有人可以提供帮助......
我也尝试过join().....这可能是愚蠢的....但我真的想不出来 一个简单的方法。这可能是一个非常愚蠢的问题。但非常感谢
答案 0 :(得分:5)
我不知道你为什么在字符串中有一个列表(似乎不是一个好主意),但你可以使用ast.literal_eval()来获取一个列表:
>>> import ast
>>> s = "['right', 'wrong']"
>>> ast.literal_eval(s)
['right', 'wrong']
请注意,这仅适用于某些事项:字符串,数字,元组,列表,字符串,布尔值和None
。
但严肃地说,你甚至不应该为其他类型的价值观做这件事。
答案 1 :(得分:3)
一种简单,愚蠢的方式,但如果你知道自己在做什么,那就很好了:
new_list = eval(b)
eval
会将字符串视为表达式,并可能会执行一些有害的操作。一个人可能不小心,或者没有把代码放在字符串里面,而bam!你的程序很乱。跟踪由eval
引起的错误也非常困难,这就是为什么你应该避免它。
有一种安全的方法,使用ast.literal_eval
:
import ast
new_list = ast.literal_eval(b)
只将它作为一个对象进行评估,你不能在其中加入代码。
DIY方式是剥离和分割它:
>>> c = [s.strip(" '") for s in b.strip("[]").split(',')]
>>> c
['right', 'wrong']