zao*_*ian 5 python string list
这是我从文本文件中读取的一行:
[54, 95, 45, -97, -51, 84, 0, 32, -55, 14, 50, 54, 68, -3, 57, 88, -1]
Run Code Online (Sandbox Code Playgroud)
我使用readline()以字符串形式读取它.现在将它转换回数组的最快方法是什么?
谢谢!
mgi*_*son 21
我不确定这是最快的,但它绝对是最安全/最简单的:
import ast
lst = ast.literal_eval(s)
Run Code Online (Sandbox Code Playgroud)
常规eval也会起作用:
lst = eval(s)
Run Code Online (Sandbox Code Playgroud)
我机器的一些基本时间:
>>> s = '[54, 95, 45, -97, -51, 84, 0, 32, -55, 14, 50, 54, 68, -3, 57, 88, -1]'
>>> def f1():
... eval(s)
...
>>> def f2():
... ast.literal_eval(s)
...
>>> timeit.timeit('f1()', 'from __main__ import f1')
31.415852785110474
>>> timeit.timeit('f2()', 'from __main__ import f2')
46.25958704948425
Run Code Online (Sandbox Code Playgroud)
所以,根据我的电脑,eval比约快50%ast.literal_eval.但是,eval非常不安全,除非您完全信任,否则不应在任何字符串上使用.除非这是一个真正的可证明的瓶颈,并且你完全相信100%的输入,我会考虑一点额外的时间来换取能够在晚上睡得香甜.
DSM*_*DSM 16
由于我们关心速度,在这种特殊情况下我可能会使用json.loads:
>>> import ast, json
>>> s = "[54, 95, 45, -97, -51, 84, 0, 32, -55, 14, 50, 54, 68, -3, 57, 88, -1]"
>>> %timeit ast.literal_eval(s)
10000 loops, best of 3: 61.6 µs per loop
>>> %timeit eval(s)
10000 loops, best of 3: 45.7 µs per loop
>>> %timeit json.loads(s)
100000 loops, best of 3: 6.61 µs per loop
>>> json.loads(s)
[54, 95, 45, -97, -51, 84, 0, 32, -55, 14, 50, 54, 68, -3, 57, 88, -1]
Run Code Online (Sandbox Code Playgroud)
(请注意,这可以在这里工作,因为这行与JSON类似.它不能在任何地方使用,ast.literal_eval因为并非所有Python文字语法都是有效的JSON.)
| 归档时间: |
|
| 查看次数: |
15644 次 |
| 最近记录: |