你好,我正在进行一些网络相关的工作,想知道是否有将Python数组作为字符串转换回Python数组的方法..例如:
x = "[1,2,3,4]"
将x转换成
x_array = [1,2,3,4]
如果能够适用于NumPy多维数组,将是额外的奖励!
你好,我正在进行一些网络相关的工作,想知道是否有将Python数组作为字符串转换回Python数组的方法..例如:
x = "[1,2,3,4]"
将x转换成
x_array = [1,2,3,4]
如果能够适用于NumPy多维数组,将是额外的奖励!
对于普通数组,请使用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]
>>>
x_array = [int(y) for y in x[1:-1].split(',') if y.strip()]
x = "[1, 2, 3, 4, 5, ]"
处发生了中断。 - rlms试试这个:
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
值。 - rlmspickle
在您的情况下的示例用法。