将字符串转换为列表

时间:2012-02-27 00:04:30

标签: python list

假设我有这样的字符串:

string = ("['1.345', '1.346', '1.347']")

所以它的格式就像一个列表,但我需要将它转换为实际的列表对象。我怎么能这样做?

4 个答案:

答案 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必须使用每个替换方法构建一个新字符串。