我有一个像"['first', 'sec', 'third']"
将此转换为字符串列表的最佳方法是什么。 ['first', 'sec', 'third']
答案 0 :(得分:10)
我使用literal_eval()
,这是安全的:
安全地评估表达式节点或包含Python的字符串 表达。提供的字符串或节点可能只包含 以下Python文字结构:字符串,数字,元组,列表, dicts,booleans和None。
这可以用于安全地评估包含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
答案 1 :(得分: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