假设我有这样的字符串:
string = ("['1.345', '1.346', '1.347']")
所以它的格式就像一个列表,但我需要将它转换为实际的列表对象。我怎么能这样做?
答案 0 :(得分:13)
您可以使用literal_eval
模块中的ast
。
>>> string = ("['1.345', '1.346', '1.347']")
>>> import ast
>>> lst = ast.literal_eval(string)
>>> lst
['1.345', '1.346', '1.347']
顺便说一句,你不需要字符串周围的括号。 string = "['1.345', '1.346', '1.347']"
工作正常。
答案 1 :(得分:2)
string = ("['1.345', '1.346', '1.347']")
lst = eval(string)
答案 2 :(得分:1)
如果我们知道这些字符串的来源,它可能会有所帮助。总的来说,Praveen的答案对于你给出的例子来说是一个很好的答案。不过,我想提一下,在你的字符串中使用双引号而不是单引号会使整个事件成为有效的JSON,在这种情况下你也可以这样做:
import json
json.loads('["1.345", "1.346", "1.347"]') # [u'1.345', u'1.346', u'1.347']
衡量表现:
import timeit
s = """\
import ast
ast.literal_eval("['1.345', '1.346', '1.347']")
"""
t = timeit.Timer(stmt=s)
print "%.2f usec/pass" % (1000000 * t.timeit(number=100000) / 100000)
结果:21.25 usec / pass
VS
import timeit
s = """\
import json
json.loads('["1.345", "1.346", "1.347"]')
"""
t = timeit.Timer(stmt=s)
print "%.2f usec/pass" % (1000000 * t.timeit(number=100000) / 100000)
结果:6.32 usec / pass
也许这是你的另类选择。
答案 3 :(得分:0)
我会删除'[',']'等等,并对该字符串使用split()方法..
lst = string.replace('[','').replace(']','').replace("'",'').replace(" ",'').split(',')
我认为如果字符串格式正确,它比eval更安全,但不是很有效,因为Python必须使用每个替换方法构建一个新字符串。