2009-12-16 5 views
2

Voici le code:Comment fonctionne cette expression max() en Python?

a = [1,2,3,4] 
b = {} 
b[1] = 10 
b[2] = 8 
b[3] = 7 
b[4] = 5 
print max(a,key=lambda w: b[w]) 

Cette imprime 1.

Je ne comprends pas comment max(a,key=lambda w: b[w]) est évalué ici cependant; Je suppose que pour chaque valeur de i en a, il trouve le b de valeur correspondante [i] par

  1. enregistrement de la valeur actuelle de i comme w dans la fonction de lambda
  2. obtenir la valeur correspondante de b [i ] et le stocker dans la clé.

Mais alors pourquoi est-ce qu'il imprime 1 au lieu de 11? Ou pourquoi ne pas imprimer 10, puisque c'est vraiment le nombre maximum?

+0

presque peur de demander, mais pourquoi avez-vous imaginé qu'il pourrait produire 11? 1 + 10? –

+0

Exactement. Mon erreur. –

Répondre

9

max(a,...) va toujours retourner un élément de a. Le résultat sera donc 1,2,3 ou 4. Pour chaque valeur w dans a, la valeur de clé est b[w]. La plus grande valeur de clé est 10, et qui correspond à w 1. Ainsi égal max(a,key=lambda w: b[w]) renvoie 1.

-3

Essayez:

a = [1,2,3,4] 
b = {} 
b[1] = 10 
b[2] = 8 
b[3] = 7 
b[4] = 5 
c = a + b.values() 
print max(*c) 
+0

c'est tellement mauvais, je ne veux même pas le downvote. – SilentGhost

+0

pourquoi est mauvais? vous pouvez aussi faire la même chose sans concaténer les valeurs si a et b sont énormes. – enrnpfnfp

+1

parce que c'est si loin de ce que OP essaie de faire, que c'est juste frustrant – SilentGhost

Questions connexes