2016-08-26 56 views
1

能否請你幫我算出這個排序基於最大長度和最大總和

q = [[12, 13, 14], [8, 9, 10,11], [2, 3, 4], [5, 6, 7]] 

想我也喜歡Q A名單,我怎麼排序的基礎上

  1. 最大長度子列表的和
  2. 的子列表的
  3. 最大總和

輸出應爲:

q = [[8,9,10,11],[12,13,14][5,6,7],[1,2,3]] 

回答

5

供應的標準,爲key lambda函數:

sorted(q, key=lambda sub: (len(sub), sum(sub)), reverse=True) 
>>> [[8, 9, 10, 11], [12, 13, 14], [5, 6, 7], [2, 3, 4]] 

lambda功能將每個子列表x和排序是基於它的len,在情況下的len結果不足以作出決定,其內容的sum用於打破平局。

3

嘗試:

sorted(q, lambda a,b: len(b)-len(a) or sum(b)-sum(a)) 
+0

@Jim它工作在Python 2而不是在Python 3 – acw1668

+0

唉唉它使用'cmp'在Python 2.我已經完全忘記了這一點,我會勸你那點這不是最便攜的選擇;-)。 –