【发布时间】:2013-12-14 22:38:57
【问题描述】:
您好,通过网络做一些事情,想知道是否有任何方法可以将 python 数组作为字符串转换回 python 数组。例如
x = "[1,2,3,4]"
将 x 转换为
x_array = [1,2,3,4]
如果它也适用于 numpy 多维数组,那就太好了!
【问题讨论】:
标签: python arrays numpy type-conversion
您好,通过网络做一些事情,想知道是否有任何方法可以将 python 数组作为字符串转换回 python 数组。例如
x = "[1,2,3,4]"
将 x 转换为
x_array = [1,2,3,4]
如果它也适用于 numpy 多维数组,那就太好了!
【问题讨论】:
标签: python arrays numpy type-conversion
对于普通数组,使用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]])
>>>
【讨论】:
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
>>> import json
>>> json.loads("[1,2,3,4]")
[1, 2, 3, 4]
>>>
【讨论】:
我建议您实际上并不想这样做。这种事情不会很容易扩展到发送,例如,你在网络上定义的类的实例。相反,我建议您使用pickle 或json 之类的东西将数据转换为字节,通过网络发送,然后再将数据转换回来。但是,在其他情况下,我总是使用ast.literal_eval。如果您指定如何通过网络发送数据,我将根据您的情况为您提供 pickle 的用法示例。
【讨论】:
试试这个:
x_array = [(int(y) if y.strip() else None) for y in x[1:-1].split(',')]
【讨论】:
list(filter(lamda x: x is not None, 以去除 None 值。
如果您确定字符串总是具有这种结构,您可以删除括号并拆分字符串:
x_array = [int(y) for y in x[1:-1].split(',') if y.strip()]
【讨论】:
x = "[1, 2, 3, 4, 5, ]"。