try:
max(nested_list, key=lambda x: x[1])
или
import operator
max(nested_list, key=operator.itemgetter(1))
Если первый элемент всегда будет 'a'
, вы можете просто сделать
max(nested_list)
Если выВы хотите погрузиться в некоторую проверку типов, и вы хотите сделать это для произвольных подсписков (только одного уровня. что-то вроде [12, 'a', 12, 42, 'b']), вы можете сделать что-то вроде.
import numbers
max(nested_list, key=lambda x: max(i for i in x
if isinstance(i, numbers.Integral)))
В любом случае, если вы не уверены, что элементы nested_list
на самом деле являются списками, вы можете выполнить
import collections
max((s for s in nested_list
if isinstance(s, collections.Sequence)),
key=some_key_function)
и просто передать ему ключевую функцию:Ваше собственное изобретение или одно из других в этом ответе.
С точки зрения вопроса lambda x: x[1]
против operator.itemgetter(1)
, я бы описал.В princible itemgetter
должен быть верным путем, но я видел, как решения operator
выигрывают от лямбда-функции, которая делает «ошибки» (я использую термин свободно, код все еще работает) в operator
.Я бы предпочел itemgetter
, если производительность не имеет значения (и, вероятно, если это имеет значение), но некоторые люди предпочитают избегать дополнительных import
.