我目前正在寻找一种简单的方法,将带有逗号分隔值示例"[2323,1231.1,123123.2 ,21 ... ,2131]"
的字符串转换为值列表或值的numpy.array。我希望它尽可能高效地完成,是否有一个python命令可以做我想要的?
答案 0 :(得分:3)
是的,ast.literal_eval
可以做到:
>>> import ast
>>> ast.literal_eval("[2323,1231.1,123123.2 ,21 ,2131]")
[2323, 1231.1, 123123.2, 21, 2131]
答案 1 :(得分:1)
string_list = '[2323, 2324,2325,2326]'
list_numbers = json.loads(string_list)
这很简单!
答案 2 :(得分:0)
@wim建议的ast
可能是最佳选择;但也有一些选择:
In [2036]: txt="[2323,1231.1,123123.2 ,21 ,2131]"
AST
In [2038]: ast.literal_eval(txt)
Out[2038]: [2323, 1231.1, 123123.2, 21, 2131]
JSON
In [2039]: import json
In [2040]: json.loads(txt)
Out[2040]: [2323, 1231.1, 123123.2, 21, 2131]
直接
In [2045]: [float(i) for i in txt[1:-1].split(',')]
Out[2045]: [2323.0, 1231.1, 123123.2, 21.0, 2131.0]
次:
In [2043]: timeit ast.literal_eval(txt)
10000 loops, best of 3: 37.7 µs per loop
In [2044]: timeit json.loads(txt)
100000 loops, best of 3: 9.57 µs per loop
In [2046]: timeit [float(i) for i in txt[1:-1].split(',')]
100000 loops, best of 3: 5.02 µs per loop
对于不同的文本,相对时间可能不同;处理与严格列表显示的偏差的能力可能不同。
为了方便和模仿,MATLAB np.matrix
也可以解析字符串;但结果是2d和更慢
In [2047]: np.matrix(txt)
Out[2047]:
matrix([[ 2.32300000e+03, 1.23110000e+03, 1.23123200e+05,
2.10000000e+01, 2.13100000e+03]])
In [2048]: timeit np.matrix(txt)
10000 loops, best of 3: 184 µs per loop
np.array
也可以处理字符串列表:
In [2050]: np.array( txt[1:-1].split(','),float)
Out[2050]:
array([ 2.32300000e+03, 1.23110000e+03, 1.23123200e+05,
2.10000000e+01, 2.13100000e+03])
In [2051]: timeit np.array( txt[1:-1].split(','),float)
...
100000 loops, best of 3: 9.03 µs per loop