2011-01-26 124 views
23

tengo una lista como estaPython - Encontrar Valor máximo en la segunda columna de una lista anidada

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

Si simplemente uso el método max(list), devolverá el estroncio respuesta, lo que sería correcto si estaba tratando de encontrar el nombre máximo, sin embargo, estoy tratando de devolver el elemento cuyo número entero es el más alto.

+3

Las respuestas aquí son perfectamente buenas, pero también puede valer la pena echarle un vistazo [una pregunta similar] (http://stackoverflow.com/questions/14884220/search-the-biggest-number-of-one-column- in-a-list-of-list-python # 14884336), que se cerró como un duplicado de este pero, no obstante, tiene algunas respuestas útiles que no son las mismas. –

Respuesta

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

La razón por la que esto funciona es porque el clave argumento de la función máximo especifica una función que se llama cuando máximo quiere saber el valor por el cual se buscará el máximo elemento . max llamará a esa función para cada elemento en la secuencia. Y "lambda x: x [1]" crea una pequeña función que toma una lista y devuelve el primer elemento (que comienza desde cero). Así

k = lambda x: x[1] 

es lo mismo que decir

def k(l): 
    return l[1] 

pero más corto y agradable de usar en situaciones como esta.

+0

Muchas gracias, trabajado como un campeón. – davelupt

+0

¿Te importaría explicar en términos simples lo que está haciendo esto? Creo que entiendo que x: x [1] define la posición, porque si sustituyo en 0 por 1, devuelve el valor de cadena máxima correcto. Pero, sin embargo, no entiendo completamente el punto de llave y lambda a pesar de mirar la biblioteca de Python. – davelupt

+1

clave es un argumento de palabra clave para la función incorporada max(). El argumento clave debe ser invocable (función, lambda, etc.) que, dado un elemento de iterable, devuelve un valor para usar en comparación. El "lambda x: x [1]" crea una función anónima (lambda) que devuelve el segundo elemento de algo que admite la notación de división de Python. –

5

Utilice el argumento key.

max(alk..., key=operator.itemgetter(1)) 
Cuestiones relacionadas