在python中将数组的字符串表示形式转换为实际数组

时间:2013-11-28 19:45:26

标签: python arrays numpy type-conversion

你在网络上做一些事情并想知道是否有任何方法将python数组作为字符串转换回python数组..例如

x = "[1,2,3,4]"

将x转换为

x_array = [1,2,3,4]

奖金,如果它也适用于numpy多维数组!

5 个答案:

答案 0 :(得分:6)

对于普通数组,请使用ast.literal_eval

>>> from ast import literal_eval
>>> x = "[1,2,3,4]"
>>> literal_eval(x)
[1, 2, 3, 4]
>>> type(literal_eval(x))
<type 'list'>
>>>

numpy.array虽然有点棘手,因为Python将它们呈现为字符串:

>>> import numpy as np
>>> x = [[1,2,3], [4,5,6]]
>>> x = np.array(x)
>>> x
array([[1, 2, 3],
       [4, 5, 6]])
>>> x = str(x)
>>> x
'[[1 2 3]\n [4 5 6]]'
>>>

你可以使用的一个黑客用简单的方法用逗号替换空白re.sub

>>> import re
>>> x = re.sub("\s+", ",", x)
>>> x
'[[1,2,3],[4,5,6]]'
>>>

然后,您可以使用ast.literal_eval并将其转回numpy.array

>>> x = literal_eval(x)
>>> np.array(x)
array([[1, 2, 3],
       [4, 5, 6]])
>>>

答案 1 :(得分:1)

我建议你实际上不想这样做。例如,通过网络定义的类的实例,这种事情不会轻易扩展。相反,我建议您使用picklejson之类的内容将数据转换为字节,通过网络发送,然后将数据转换回来。但是,在其他情况下,我总是使用ast.literal_eval。如果您指定通过网络发送数据的方式,我会根据您的具体情况为您提供pickle的示例用法。

答案 2 :(得分:1)

试试这个:

x_array = [(int(y) if y.strip() else None) for y in x[1:-1].split(',')]

答案 3 :(得分:1)

Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> import json
>>> json.loads("[1,2,3,4]")
[1, 2, 3, 4]
>>> 

答案 4 :(得分:0)

如果您确定字符串始终具有该结构,则可以删除括号并拆分字符串:

x_array = [int(y) for y in x[1:-1].split(',') if y.strip()]
相关问题