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
12.5k7 золотых знаков18 серебряных знаков48 бронзовых знаков
задан 22 апр 2021 в 10:25
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
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_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 руб./за проект