2017-10-04 117 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() 

,第二個選項只有在數組長度相同的情況下才有效。