列表理解很好地完成了这项工作:In [191]: a = np.array([np.array([1.]), np.array([2, 3]), np.array(['a', 'b', 'c'])])
In [192]: a
Out[192]:
array([array([ 1.]), array([2, 3]),
array(['a', 'b', 'c'],
dtype='
In [193]: [tuple(i) for i in a]
Out[193]: [(1.0,), (2, 3), ('a', 'b', 'c')]
In [194]: tuple([tuple(i) for i in a])
Out[194]: ((1.0,), (2, 3), ('a', 'b', 'c))
将数组列表包装在另一个数组层中没有多大作用。dtype对象的数组只是一个带有ndarray包装的列表。a的大多数操作将其视为一个列表。在
^{pr2}$
更正-如果要转换内部数组的元素,我们需要首先使用tolist()。tuple(i)类似于list(i),在第一维上迭代,而{}执行递归转换。在In [204]: type([tuple(i.tolist()) for i in a][0][0])
Out[204]: float
当我们将list和{}应用于2d数组时,它们之间的区别的更多信息:In [210]: np.ones((2,3)).tolist()
Out[210]: [[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]]
In [211]: list(np.ones((2,3)))
Out[211]: [array([ 1., 1., 1.]), array([ 1., 1., 1.])]
In [212]: tuple(np.ones((2,3)))
Out[212]: (array([ 1., 1., 1.]), array([ 1., 1., 1.]))
没有totuple()方法,也没有任何东西可以快速而简单地将列表的嵌套列表转换为元组的嵌套元组。在
tolist不通过dtype=object层递归:In [214]: a.tolist()
Out[214]:
[array([ 1.]), array([2, 3]), array(['a', 'b', 'c'],
dtype='