Python中的list(array)和array.tolist()之间有什么区别吗?
以下变量看起来很相似,但事实并非如此,我不明白为什么:Python中的list(array)和array.tolist()之间有什么区别吗?,python,arrays,python-3.x,list,numpy,Python,Arrays,Python 3.x,List,Numpy,以下变量看起来很相似,但事实并非如此,我不明白为什么: import ujson import numpy as np arr = np.array([1, 2, 3, 4]) arr_1 = arr.tolist() arr_2 = list(arr) arr_1 == arr_2 # True ujson.dumps({'arr': arr_1}) # it works ujson.dumps({'arr': arr_2}) # it does not work (Overflo
import ujson
import numpy as np
arr = np.array([1, 2, 3, 4])
arr_1 = arr.tolist()
arr_2 = list(arr)
arr_1 == arr_2 # True
ujson.dumps({'arr': arr_1}) # it works
ujson.dumps({'arr': arr_2}) # it does not work (OverflowError: Maximum recursion level reached)
我使用的是Python-3.5.6、ujson-1.35和numpy-1.16.4
非常感谢你的帮助 用于不同的精度级别
它们的创建方式可以方便地与常规Python整数进行比较
np.int32(3) == 3 # True
[np.int32(1), 4] == [1, np.int32(4)] # True
()
这就是为什么您的arr\u 1==arr\u 2
它们不能很容易地序列化为json,但是对于一维数组,.它是相同的,但是对于更高维度,.toList是递归应用的,而list不会-reference
toList
一路转换它list()
只在第一个维度上迭代。在本例中,arr_2
是一个np.int
对象列表,其中asarr_1
是一个python整数列表。您的回答是有意义的,但它们如何解释在本例中观察到的行为?但是,最后,arr_1==arr_2,因此我理解这两个变量应该具有相同的行为。我不确定为什么ujson
有递归错误。也许它试图将int32
数字表示为类似字典的对象,但失败了。如果使用标准的json
库,您会发现问题在于它不知道如何序列化numpy
int32
类型中存储的数字。看见