2016-10-27 112 views
0

我目前正在尋找一種簡單的方法來將逗號分隔值示例"[2323,1231.1,123123.2 ,21 ... ,2131]"的字符串轉換爲值列表或值的numpy.array。我希望它儘可能高效,有沒有一個python命令可以做我想要的?將值的字符串存儲到值列表中?

回答

3

是,ast.literal_eval可以做到這一點:

>>> import ast 
>>> ast.literal_eval("[2323,1231.1,123123.2 ,21 ,2131]") 
[2323, 1231.1, 123123.2, 21, 2131] 
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 
1
string_list = '[2323, 2324,2325,2326]' 
list_numbers = json.loads(string_list) 

就這麼簡單!

相關問題