2017-10-21 7 views
1

En utilisant Python3.6.2, j'essayais de trouver le mot le plus long dans une phrase. Le code que je suis venu avec est,Obtention d'un résultat câblé à partir de la fonction max dans python

>>> sen = "Argument goes here" 

>>> max(sen.split()) 

'here' 

Je voudrais pourquoi la réponse « ici » au lieu de « argument », plutôt que la réponse au problème.

Merci d'avance pour votre temps - si j'ai manqué quelque chose, sur- ou sous-souligné un point spécifique laissez-moi savoir dans les commentaires.

+4

max compare vos cordes dans l'ordre lexical pas la longueur de la chaine –

+0

Pourriez-vous m'expliquer ce qu'est l'ordre lexical ou donner des liens pour le connaitre @SungJin Steve Yoo –

+1

Voir ici. http://thepythonguru.com/python-strings/ –

Répondre

3

Comme Sungjin Steve Yoo a souligné, la fonction max par défaut compare string à Lexological Order, et ici, la longueur de chaîne ne joue pas.

Alors, quand vous faites

max(['Argument', 'goes', 'here']) 

Ici, la lettre de départ h est d'ordre plus élevé par rapport à la fois A et g.

Si vous vouliez le faire par length et lexological order, utilisez la fonction key:

max(sen.split(), key= lambda x:(len(x), x)) 

Voici quelques cas pour vous d'obtenir le coup de lui:

>>> sen = sen = 'hex men or -' 

>>> max(sen.split()) 
=> 'or' 
>>> max(sen.split(), key=len) 
=> 'hex' 
>>> max(sen.split(), key= lambda x: (len(x), x)) 
=> 'men' 
+1

Super. bonne réponse –

+0

@SungJinSteveYoo: Merci :) –

2

Lorsque vous ne mentionnez pas la fonction key de max, il prendra juste la commande par défaut des itearbles; dans ce cas, l'ordre lexical. Vous devez mentionner que vous devez commander par len. Vous devez faire ceci:

>>> sen = "Argument goes here" 
>>> max(sen.split(), key=len) 
'Argument'