Как найти список в списке списков, сумма элементов которых наибольшая?

У меня есть список списков:

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]]