5

我有一个这样的字符串"['first', 'sec', 'third']"

将其转换为字符串列表的最佳方法是什么,即。['first', 'sec', 'third']

4

2 回答 2

10

我会使用literal_eval(),它是安全的:

安全地评估表达式节点或包含 Python 表达式的字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、数字、元组、列表、字典、布尔值和无。

这可用于安全地评估来自不受信任来源的包含 Python 表达式的字符串,而无需自己解析值。

>>> import ast
>>> ast.literal_eval("['first', 'sec', 'third']")
['first', 'sec', 'third']

除了文字表达式之外,它不评估任何内容:

>>> ast.literal_eval('"hello".upper()')
...
ValueError: malformed string

>>> ast.literal_eval('"hello"+" world"')
...
ValueError: malformed string
于 2013-08-06T10:17:14.127 回答
1

如果它们总是按照您所说的那样格式化所有字符串都以相同的方式引用,那么简单的拆分也应该这样做:

"['first', 'sec', 'third']".split("'")[1::2]

这个解决方案要脆弱得多,因为它只支持单一的引用样式。

不过,它要快得多。

%timeit "['first', 'sec', 'third']".split("'")[1::2]
1000000 loops, best of 3: 726 ns per loop

%timeit ast.literal_eval("['first', 'sec', 'third']")
10000 loops, best of 3: 21.8 us per loop
于 2013-08-06T10:26:53.403 回答