Ecco una risposta nel caso in cui si ottiene una lista di lista in cui il numero non è sempre al 3 ° posizione:
from itertools import chain
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(resultlist)))
Che cosa sta succedendo? itertools.chain
appiattisce l'elenco degli elenchi, il filter
quindi seleziona tutti i valori numerici di cui viene determinato il valore massimo utilizzando la funzione max
. Il vantaggio è che funziona anche per liste arbitrarie di liste in cui il valore numerico può essere trovato in qualsiasi punto della lista.
Per esempio:
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
più Un esempio generale:
myList = [[23, 34, 'a'],['b'],['t', 100]]
max(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(myList)))
#prints 100
EDIT:
Se anche voi volete ottenere l'indice del valore massimo, si può fare la seguente (utilizzando l'approccio @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)
Questo approccio presuppone che esista esattamente un valore numerico per elenco!
Un altro esempio utilizzando una lista in cui il valore numerico è in una posizione arbitraria:
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)
Hai un'apertura supplementare parentesi quadra al secondo indice. – bourbaki4481472
@ bourbaki4481472 Oh sì, scusa, non doveva essere lì. È stato solo un errore quando ho scritto la domanda, non è nel mio programma attuale. – FeatherMarauder