2016-08-26 3 views
1

Можете ли вы помочь мне понять этоСортировку на основе максимальной длины и максимальной суммы

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

Предположим, У меня есть список, как д, Как отсортировать на основе

  1. Максимальная длина подсписков и
  2. Максимальная сумма подсписков

Вывод должен быть:

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

ответ

5

Поставка ваши критерии в лямбда-функции для key:

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

Try:

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. Я совершенно забыл, что я хотел бы призвать вас, чтобы указать, что out, это не самый портативный вариант ;-). –

Смежные вопросы