列出最佳实践的Python字符串

列出最佳实践的Python字符串,python,string,list,Python,String,List,我有一个像这样的字符串“['first'、'sec'、'third']” 将其转换为字符串列表的最佳方法是什么?例如,['first'、'sec'、'third']我会使用,它是安全的: 安全地计算表达式节点或包含Python的字符串 表情。提供的字符串或节点只能由 以下Python文本结构:字符串、数字、元组、列表、, 口授、布尔语和无语 这可以用于安全地评估包含Python的字符串 来自不受信任源的表达式,无需解析 重视自己 除了字面表达式,它不求值任何内容: >>> as

我有一个像这样的字符串
“['first'、'sec'、'third']”

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

我会使用,它是安全的:

安全地计算表达式节点或包含Python的字符串 表情。提供的字符串或节点只能由 以下Python文本结构:字符串、数字、元组、列表、, 口授、布尔语和无语

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

除了字面表达式,它不求值任何内容:

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

>>> ast.literal_eval('"hello"+" world"')
...
ValueError: malformed string
如果它们总是按照您所说的格式,所有字符串都以相同的方式引用,那么简单的拆分也可以做到这一点:

"['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

感谢alecxe,我一直在使用它,但我很好奇人们会怎么想,其他方法等+1-这是最好的方法,因为
ast.literal\u eval()
是安全的,而不是
eval()
。也就是说,如果可能的话,最好的选择可能是以更标准化的格式存储数据。很酷,但是如果列表是
“[‘第一’、‘第二’、‘第三’、‘第四’”]”
甚至
L=“”[‘第一’、‘第二’、‘第三’、‘第四’””
很好的例子。我将给出答案,我希望这有助于说明为什么literal_eval是更好的做法。最好的方法是使用已知的序列化格式,如json。
%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