将一串值存储到值列表中?

时间:2016-10-27 20:16:04

标签: python-2.7 numpy

我目前正在寻找一种简单的方法,将带有逗号分隔值示例"[2323,1231.1,123123.2 ,21 ... ,2131]"的字符串转换为值列表或值的numpy.array。我希望它尽可能高效地完成,是否有一个python命令可以做我想要的?

3 个答案:

答案 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