Вот ответ только в том случае, вы получите список списка, где число не всегда на 3-е позиции:
from itertools import chain
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist)))
Что происходит? itertools.chain
выравнивает список списков, filter
затем выбирает все числовые значения, максимальное значение которых определяется с помощью функции max
. Преимущество в том, что оно также работает для произвольных списков списков, где числовое значение может быть найдено в любом месте списка.
Для примера:
resultlist = [['1', '1', 'a', 8.3931], ['1', '2', 'b', 6.3231], ['2', '1', 'c', 9.1931]]
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist)))
#prints 9.1931
Еще один общий пример:
myList = [[23, 34, 'a'],['b'],['t', 100]]
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(myList)))
#prints 100
EDIT:
Если вы хотите получить индекс максимального значения, вы можете сделать следующий (с использованием подхода @Padraic Cunningham):
from itertools import chain
import operator
resultlist = [['1', '1', 'a', 8.3931], ['1', '2', 'b', 6.3231], ['2', '1', 'c', 9.1931]]
l = filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist))
# l: [8.3931, 6.3231, 9.1931]
max(enumerate(l), key = operator.itemgetter(1))
#(2, 9.1931)
Этот подход предполагает, что в списке имеется ровно одно числовое значение! более
Одним из примеров использования списка, где числовое значение находится на произвольном положении:
from itertools import chain
import operator
myList = [[23, '34', 'a'],['b', 1000],['t', 'xyz', 100]]
l=filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(myList))
max(enumerate(l), key = operator.itemgetter(1))
#prints (1, 1000)
У вас есть дополнительные отверстия квадратные скобки во втором индексе. – bourbaki4481472
@ bourbaki4481472 О да, извините, этого не должно было быть. Это была просто ошибка, когда я написал вопрос, это не в моей реальной программе. – FeatherMarauder