2017-10-04 51 views
2

首先,这是行不通的代码:如何排序包含numpy数组的元组列表?

ls = [(1.0,np.array([3.0, 4.0])), (1.0,np.array([3.0, 4.1])), (3.0,np.array([2.0, 1.0]))] 
ls.sort() 

正如你所看到的,我有一个元组(ls)的列表。每个元组的第一个元素是一个浮点数。我尝试按ls.sort()对列表进行排序。在大多数情况下,它运作良好。然而,有时(就像在上面的例子中),我有元组的第一个元素的值相同。在这种情况下,python尝试使用元组的第二个元素来排列元组,并且它不起作用,因为在元组中的第二个地方我有numpy数组。

如何通过忽略元组的第二个元素来排序列表?如果第一个元素是相同的,我不关心排序(它可以是原始排序,或随机)。

回答

1

可能使用关键参数。这是你想要的吗?

import numpy as np 
ls = [(1.0,np.array([3.0, 4.0])), (1.0,np.array([3.0, 4.1])), (3.0,np.array([2.0, 1.0]))] 
ls.sort(key=lambda x: x[0]) 
1

要么告诉Python仅在第一项

sorted(ls, key=lambda t: t[0]) 

排序或整个事情转化为结构化numpy的阵列,并要求numpy的对它进行排序

ls_arr = np.array(ls, dtype=[('my_val', float), ('my_arr', float, 2)]) 
ls_arr.sort() 

,第二个选项只有在数组长度相同的情况下才有效。