快速和紧凑仅适用于数字 numpy 数组。使用 object dtype,速度和存储类似于列表(甚至可能更慢)。
In [39]: arr =np.array([[(115, 1), 47],
...: [(115, 2), 1],
...: [(115, 3), 3],
...: [(2147482888, 5), 26],
...: [(275030867, 5), 3]], dtype=object)
In [40]: arr.shape
Out[40]: (5, 2)
这样一个数组的一个优点是它很容易访问“列”:
In [41]: arr[:,0]
Out[41]:
array([(115, 1), (115, 2), (115, 3), (2147482888, 5), (275030867, 5)],
dtype=object)
In [42]: arr[:,1]
Out[42]: array([47, 1, 3, 26, 3], dtype=object)
整个数组作为列表的列表:
In [43]: alist = arr.tolist()
In [44]: alist
Out[44]:
[[(115, 1), 47],
[(115, 2), 1],
[(115, 3), 3],
[(2147482888, 5), 26],
[(275030867, 5), 3]]
但是对于查找元组,使用元组列表更容易:
In [47]: alist = arr[:,0].tolist()
In [48]: alist
Out[48]: [(115, 1), (115, 2), (115, 3), (2147482888, 5), (275030867, 5)]
In [49]: alist.index((115,1))
Out[49]: 0
In [50]: alist.index((115,3))
Out[50]: 2
In [51]: arr[2,:]
Out[51]: array([(115, 3), 3], dtype=object)
也就是说,您的结构和所需的操作确实更像字典操作。 numpy 不适合查找“密钥”并添加它们。