web-dev-qa-db-fra.com

Trouver la valeur maximale dans la deuxième colonne d'une liste imbriquée?

J'ai une liste comme celle-ci:

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

Si j'utilise simplement la méthode max(list), il retournera la réponse 'strontium', ce qui serait correct si j'essayais de trouver le nom max name , mais j'essaie de renvoyer l'élément dont l'entier est le plus élevé.

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

Cela fonctionne parce que l'argument clé de la fonction max spécifie une fonction appelée lorsque max veut connaître la valeur à l'aide de laquelle l'élément maximum sera recherché. max appellera cette fonction pour chaque élément de la séquence. Et lambda x: x[1] crée une petite fonction qui prend une liste et renvoie le premier élément (le comptage commence à partir de zéro). Alors

k = lambda x: x[1]

est le même que dire

def k(l):
  return l[1]

mais plus court et agréable à utiliser dans des situations comme celle-ci.

53
kynnysmatto

Utilisez l'argument key.

max(alk..., key=operator.itemgetter(1))
7

il est plutôt délicat de supposer qu'un élément d'une liste est en réalité toujours un nombre. Si les nombres sont devenus des chaînes, la max() renverra la «valeur» avec le premier nombre le plus élevé:

alkaline_earth_values = [['beryllium', '9'], ['magnesium', '12'],['calcium', '20'],
                         ['strontium', '38'], ['barium', '56'], ['radium', '88']]
max(alkaline_earth_values, key=lambda x: x[1])

renvoie ['beryllium', '9']

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

fera l'affaire, quand vous êtes sûr que ce sera un nombre

0
uytda