Как найти список в списке списков, сумма элементов которых наибольшая?
У меня есть список списков:
x = [[1,2,3], [4,5,6], [7,8,9], [2,2,0]]
Я хочу получить список, чья сумма его элементов является наибольшей в списке. В этом случае [7,8,9]
.
Я бы предпочел использовать метод map
или lambda
или списка, отличный от цикла for/while/if
.
С наилучшими пожеланиями
Ответы
Ответ 1
max
принимает ключевой аргумент, с ним вы можете указать max, как вычислить значение для каждого элемента в итерабельном. sum
здесь будет хорошо:
max(x, key=sum)
Демо:
>>> x = [[1,2,3], [4,5,6], [7,8,9], [2,2,0]]
>>> max(x, key=sum)
[7, 8, 9]
Если вам нужно использовать другой метод суммирования ваших предметов, вы также можете указать свои собственные функции; это не ограничивается встроенными функциями python:
>>> def mymaxfunction(item):
... return sum(map(int, item))
...
>>> max([['1', '2', '3'], ['7', '8', '9']], key=mymaxfunction)
['7', '8', '9']
Ответ 2
Для полноты и как @Martijn избили меня до самого элегантного ответа - я просто поставлю опцию перед тем, как параметр key=
был доступен в Python (но если вы используете < 2,5 - вам действительно нужно обновить ) и насколько уродливым оно будет:
x = [[1,2,3], [4,5,6], [7,8,9], [2,2,0]]
with_idx = ( (sum(v), i) for i,v in enumerate(x))
print x[max(with_idx)[1]]