У меня есть список:
[
[['4', '10'], ['2', '6'], ['1', '3']],
[['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]
]
Я хочу отсортировать по общему количеству элементов. В первой группе есть позиции 4, 10, 2, 6, 1 и 3, всего 6 позиций. Второй имеет 1, 4, 10, 5, 2, 6, 11, 1 и 3, всего 9 элементов. Поэтому я хочу, чтобы вторая группа появилась перед первой:
[
[['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']],
[['4', '10'], ['2', '6'], ['1', '3']]
]
(в списке гораздо больше групп, это всего лишь упрощенная версия проблемы)
Я пытался сделать sort(key=len)
, но он сортировался по количеству списков в каждой группе (например, в первой группе 3 списка, во второй тоже 3).
Насколько я понимаю, вы хотите сортировать по сумме длин всех списков, содержащихся в каждом списке. Вы можете использовать оба sum
и len
(а также map
для их объединения) для достижения своей цели:
ls = [
[['4', '10'], ['2', '6'], ['1', '3']],
[['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]
]
sorted_ls = sorted(ls, key=lambda l: sum(map(len, l)), reverse=True)
Обратите внимание, что sorted
вернет список, отсортированный в порядке возрастания, поэтому мы передаем reverse=True
, чтобы отсортировать его по убыванию.
Привет. Если бы одна из групп была
[['1', '4'], ['4', '10']]
, вы бы посчитали это как 3 предмета из 4 предметов?