2016-08-26 53 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.我已经完全忘记了这一点,我会劝你那点这不是最便携的选择;-)。 –