2011-01-26 8 views
23

Ho una lista come questaPython - Trovare Max valore nella seconda colonna di un elenco nidificato

alkaline_earth_values = [['beryllium', 4], ['magnesium', 12],['calcium', 20], ['strontium', 38], ['barium', 56], ['radium', 88]] 

Se ho semplicemente uso il metodo max(list), verrà restituito lo stronzio risposta, che sarebbe corretto se io stava cercando di trovare il nome massimo, tuttavia sto cercando di restituire l'elemento il cui numero intero è più alto.

+3

Le risposte qui sono perfettamente buone, ma potrebbe anche essere utile verificare [una domanda simile] (http://stackoverflow.com/questions/14884220/search-the-biggest-number-of-one-column- in-a-list-of-list-python # 14884336), che è stato chiuso come duplicato di questo, ma ha comunque alcune risposte utili che non sono le stesse di queste. –

risposta

46
max(alkaline_earth_values, key=lambda x: x[1]) 

Il motivo per cui funziona è perché il chiave argomento della funzione max specifica una funzione che viene chiamata quando max vuole conoscere il valore per il quale l'elemento di massima viene ricercato . max chiamerà quella funzione per ogni elemento nella sequenza. E "lambda x: x [1]" crea una piccola funzione che prende in una lista e restituisce il primo elemento (il conteggio inizia da zero). Così

k = lambda x: x[1] 

è lo stesso che dire

def k(l): 
    return l[1] 

ma più breve e piacevole da usare in situazioni come questa.

+0

Grazie mille, ha lavorato come un campione. – davelupt

+0

Ti dispiacerebbe spiegare in termini laici cosa sta facendo. Penso di capire che x: x [1] definisce la posizione, perché se sostituisco in 0 per 1 restituisce il valore di stringa massima corretta. Ma, comunque, non capisco completamente il punto di chiave e lambda nonostante si guardi la libreria Python. La chiave – davelupt

+1

è un argomento parola chiave della funzione built-in max(). L'argomento chiave dovrebbe essere un callable (function, lambda, ecc.) Che dato un elemento del iterable restituisce un valore per l'uso in confronto. "Lambda x: x [1]" crea una funzione anonima (lambda) che restituisce il secondo elemento di qualcosa che supporta la notazione di slice Python. –

5

Utilizzare l'argomento key.

max(alk..., key=operator.itemgetter(1)) 
Problemi correlati