Написать пост

Задача на поиск списка с максимальной суммой элементов

Аватар Никита Прияцелюк

Представим, что у нас есть список со списками и нам нужно найти вложенный список с максимальной суммой элементов. Как бы вы решили эту задачу? Пока вы думаете, давайте рассмотрим несколько возможных вариантов решения на Python от самого громоздкого до «однострочника».

Обложка поста Задача на поиск списка с максимальной суммой элементов

Представим, что у нас есть список со списками и нам нужно найти вложенный список с максимальной суммой элементов. Задача звучит довольно просто, и решение «в лоб» приходит незамедлительно. Но зачем идти очевидным путём, когда есть более утончённый? Давайте рассмотрим несколько возможных вариантов решения на Python от самого громоздкого до «однострочника».

Способ 1. Обход вложенных списков

Мы можем просто обойти вложенные списки, сложить все элементы в каждом из них и с помощью функции max() найти наибольшую сумму:

			def maximum_sum(list_of_lists):
    maxi = 0
 
    # обходим внешний список
    for list in list_of_lists:
        sum = 0
        # обходим вложенные списки
        for item in list:
            sum += item     
        maxi = max(sum, maxi) 
         
    return maxi
     
list_of_lists = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]
print(maximum_sum(list_of_lists)) # выводит 33
		

Способ 2. Обход внешнего списка

Ещё можно обойти только внешний список и сложить элементы вложенных с помощью функции sum(), а затем найти максимальную сумму с помощью уже знакомой функции max():

			def maximum_sum(list_of_lists):
    maxi = 0
    #обходим внешний список
    for l in list_of_lists:
        maxi = max(sum(l), maxi)
         
    return maxi
     
list_of_lists = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]
print(maximum_sum(list_of_lists)) # выводит 33
		

Способ 3. Функции sum и max

Ещё один способ заключается в сочетании функций sum() и max():

			def maximum_sum(list_of_lists):
    return max(sum(l) for l in list_of_lists)
     
list_of_lists = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]
print(maximum_sum(list_of_lists)) # выводит 33
		

Прим. перев. Кроме того, возможна реализация с помощью параметра key функции max():

			def maximum_sum(list_of_lists):
    return sum(max(list_of_lists, key=sum))
     
list_of_lists = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]
print(maximum_sum(list_of_lists)) # выводит 33
		

Параметр key=sum позволяет найти сумму элементов списка в списке; max(list_of_lists, key=sum) находит список с максимальной суммой элементов, а sum(max(list_of_lists, key=sum)) возвращает сумму элементов этого списка.

Задачи умеренной сложности
Python
9913