列出最佳实践的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