Как найти наибольшую сумму в питоне

def func(arr):     
    sum = 0
    result = []
    for i in range(len(arr)):
        sum = 0
        arr[i] = list(str(arr[i]))
        for j in range(len(arr[i])):
            sum += int(arr[i][j])
        result.append(sum)
        x = result.index(sum)
        print(x)
    
array = [120, 125, 365, 450]
print(func(array))

Что я делаю: сначала нахожу сумму цифр числа, чтобы найти максимальное. По индексу максимального числа из полученных сумм хочу найти максимальное из array.

До append все хорошо, но с индексом и нахождением числа проблема…

Jack_oS's user avatar

Jack_oS

12.5k7 золотых знаков18 серебряных знаков48 бронзовых знаков

задан 22 апр 2021 в 10:25

Дарья Лазарева's user avatar

4

Находим максимальный элемент массива array по ключу:

  • Из числа 365 (к примеру) делаем список ['3', '6', '5'].
  • Находим сумму элементов списка sum(...), при этом переводя их в map(int, ...).
array = [120, 125, 365, 450]
print(max(array, key=lambda x: sum(map(int, str(x)))))

ответ дан 22 апр 2021 в 10:36

entithat's user avatar

entithatentithat

13.1k2 золотых знака19 серебряных знаков37 бронзовых знаков

3

В дополнение к ответу от entithat.
Больше текста, но без зубодробительности однострочников пайтона 😉

# функция для определения суммы чисел
def sum_nums(num):
    result = 0                    # текущая сумма - 0
    for ch in str(num):           # для каждого элемента в числе, переведенном в строку:
        result += int(ch)         # добавить инт элемента к результату
    return result

# основная ф-ция
def max_sum_num(arr):
    max_num = arr[0]              # первый в списке - текущий максимальный
    max_sum = sum_nums(arr[0])    # то же для суммы
    for el in arr[1:]:            # для каждого элемента, начиная со второго:
        el_sum = sum_nums(el)     # вычислить сумму
        if el_sum > max_sum:      # если больше текущей:
            max_num = el          # обновить максимальное число
            max_sum = el_sum      # обновить максимальную сумму
    return max_num
array = [120,125,365,450]
max_sum_num(array)

ответ дан 22 апр 2021 в 10:58

Jack_oS's user avatar

Jack_oSJack_oS

12.5k7 золотых знаков18 серебряных знаков48 бронзовых знаков

2

Given lists in a list, find the maximum sum of elements of list in a list of lists. Examples:

Input :  [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]
Output : 33 
Explanation: sum of all lists in the given list of lists are:
             list1 = 6, list2 = 15, list3 = 33, list4 = 24 
             so the maximum among these is of 

Input : [[3, 4, 5], [1, 2, 3], [0, 9, 0]]
Output : 12

Method 1 : Traversal of list in lists

We can traverse in the lists inside the list and sum up all the elements in a given list and by max function get the maximum of sum of all elements in lists of list. 

Python

def maximumSum(list1):

    maxi = 0

    for x in list1:

        sum = 0

        for y in x:

            sum+= y    

        maxi = max(sum, maxi)

    return maxi

list1 = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]

print maximumSum(list1)

Time Complexity: O(n*m) where n is the number of lists and m is the maximum size of the list.
Auxiliary Space: O(1)

Method 2 : Traversal of list

Traverse in the outer list only, and sum all elements in the inner lists by using sum() function, find the sum of all the lists and get the maximum of all the sum calculated. 

Python

def maximumSum(list1):

    maxi = 0

    for x in list1:

        maxi = max(sum(x), maxi)

    return maxi

list1 = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]

print maximumSum(list1)

Time Complexity: O(n*m) where n is the number of lists and m is the maximum size of the list.
Auxiliary Space: O(1)

Method 3 : Sum and Max function

sum(max(list1, key=sum))

The above syntax of max() function allows us to find the sum of list in list using the key=sum. max(list1, key=sum), this finds the list with maximum sum of elements and then sum(max(list1, key=sum)) returns us the sum of that list. 

Python

def maximumSum(list1):

    return(sum(max(list1, key = sum)))

list1 = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]

print maximumSum(list1)

Time Complexity: O(n*m) where n is the number of lists and m is the maximum size of the list.
Auxiliary Space: O(1)

                                                                  Method 4 : Using sum() and sort() methods

Python3

def maximumSum(list1):

    x=[]

    for i in list1:

        x.append(sum(i))

    x.sort()

    return x[-1]

list1 = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]

print(maximumSum(list1))

Time Complexity : O(NlogN)
Auxiliary Space : O(N)

Method 5 : Using reduce()

This method uses the reduce() function to iterate over the list of lists and a lambda function to compare the sums of each list. The lambda function returns the list with the larger sum, and the reduce function keeps track of the maximum sum by repeatedly applying the lambda function to the list of lists. The final result is the sum of the list with the maximum sum.

Here is another approach using the reduce() function and a lambda function:

Python3

from functools import reduce

def maximum_sum(lists):

    max_sum = reduce(lambda x, y: x if sum(x) > sum(y) else y, lists)

    return sum(max_sum)

lists = [[1, 2, 3], [4, 5, 6], [10, 11, 12], [7, 8, 9]]

print(maximum_sum(lists)) 

Time complexity: O(n*m) where n is the number of lists and m is the maximum size of the list.
Space complexity: O(1)

Last Updated :
11 Jan, 2023

Like Article

Save Article

Представим, что у нас есть список со списками и нам нужно найти вложенный список с максимальной суммой элементов. Задача звучит довольно просто, и решение «в лоб» приходит незамедлительно. Но зачем идти очевидным путём, когда есть более утончённый? Давайте рассмотрим несколько возможных вариантов решения на 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 | Maximum sum of elements of list in a list of lists»

ПОЖАЛУЙСТА, ПОМОГИТЕ, С ЭТОЙ ЗАДАЧЕЙ. ПИТОН.



Ученик

(73),
закрыт



2 года назад

Victor Surozhtsev

Просветленный

(27948)


2 года назад

#Для массива натуральных чисел, в котором может быть какое угодно количество элементов с максимальной суммой цифр:
def f(n): return sum([int(j) for j in str(n)])
a=[int(x) for x in input(‘>> ‘).split() ]
b,max=[],0
for x in a:
~~fn=f(n)
~~if fn>max: max=fn; b=[fn]
~~elif fn==max: b.append(fn)
print(*b)
#Выведутся все необходимые элементы, даже повторяющиеся! А если вводятся необязательно натуральные целые, то в конце генератора ввода надо будет поставить if int(x)>0

Ришат

Знаток

(326)


1 год назад

seqNum = int(input(‘Введите количество чисел: ‘))
max_m = 0
max_sum =0
summ = 0
for i in range(seqNum):
print(‘Введите число: ‘, end = ‘ ‘)
number = int(input())
this_num = number
while number > 0:
summ += number %10
number //= 10
if summ > max_sum:
max_sum = summ
max_num = this_num
summ = 0
print(‘Число’,max_num,’имеет максимальную сумму цифр:’, max_sum)

klianikУченик (184)

7 месяцев назад

и при выполнении данного кода, почему-то всегда последнее введённое число выводится на экран как наибольшее число…

Валя Карачёва

Знаток

(260)


5 месяцев назад

total_number = int(input(“Введите кол-во цифр: “))
sum_rem = 0
amount = 0
this_number = 0
this_number_two = 0
for num in range (1, total_number + 1) :
~~print(“Введите”, num, “число”)
~~number = int(input())
~~this_number = number
~~while number > 0 :
~~ ~~sum_rem += number % 10
~~~~number //= 10
~~if sum_rem > amount :
~~~~amount = sum_rem
~~~~this_number_two = this_number
~~~~sum_rem = 0
~~else:
~~~~sum_rem = 0
print(“Наибольшее по сумме цифр число”, this_number_two, ‘сумма’, amount )

Как найти наибольшее по сумме чисел?

Вводится N чисел.
Среди натуральных чисел, которые были введены,
найдите наибольшее по сумме цифр. Выведите на экран это число и сумму его цифр.
Сделал так, но что-то не особо рабочий….

number_of_digits = int(input('Введите количество чисел: '))
max_m = 0
max_sum = 0
summ = 0

for i in range(number_of_digits):
    print('Введите число: ', end=' ')
    number = int(input())
    this_num = number
    while number > 0:
      summ += number % 10
      number //= 1
      if summ > max_sum:
        max_sum = summ
        max_num = this_num
        summ = 0
print('Число', max_num, 'имеет максимальную сумму цифр:', max_sum)<code lang="python">

</code>

Прошу помощи в решении.


  • Вопрос задан

    08 февр.

  • 381 просмотр

number //= 1
Может, всё-таки 10?

Ну и почему ты делаешь проверку на максимум после каждой цифры (т.е. внутри while),а не после того как ты посчитал сумму всех цифр числа?

Пригласить эксперта

nums = [111, 99, 123]

result = max(nums, key=lambda n: sum(map(int, f'{n}')))

print(result, sum(map(int, f'{result}')))


  • Показать ещё
    Загружается…

16 мая 2023, в 00:11

300 руб./за проект

16 мая 2023, в 00:11

20000 руб./за проект

15 мая 2023, в 23:43

100 руб./за проект

Минуточку внимания

Добавить комментарий