Pouvez-vous m'aider à comprendre comment ce code fonctionne?
words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
best = 0
for index in range(len(words)):
if len(words[index]) > len(words[best]):
best = index
print(words[best])
8 Réponses :
Pour chaque mot de la liste, vérifiez que, si la longueur du mot actuel est supérieure au mot le plus long que nous ayons vu jusqu'à présent, il s'agit du nouveau mot le plus long.
Fondamentalement, au lieu de stocker la longueur des mots dans une liste, nous la vérifions à chaque fois, puis déterminons le mot, avec la longueur la plus longue.
Nous avons ce code:
print(words[best])
Décomposons un peu ceci:
best = index
Cela crée une liste de mots de différentes longueurs .
if len(words[index]) > len(words[best]):
Cette variable contient l'index du mot de plus grande longueur que nous ayons rencontré jusqu'à présent.
for index in range(len(words)):
Le L'instruction for parcourra la liste de mots.
best = 0
Cette instruction if vérifie si le mot à l'index actuel est plus long que le mot de l'index vers lequel pointe best .
words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
Si le nouveau mot est plus long que notre meilleur mot jusqu'à présent, nous définissez le meilleur mot sur le nouvel index.
words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"]
best = 0
for index in range(len(words)):
if len(words[index]) > len(words[best]):
best = index
print(words[best])
Nous imprimons le mot en utilisant le meilleur index de mots enregistré.
best = 0 :
Cela signifie que, jusqu'à présent, la longueur la plus longue de la liste est 0. Cette valeur sera mise à jour dans la boucle.
pour l'index dans la plage (len (mots)) :
Dans votre exemple, len (mots) est égal à 6, c'est-à-dire le nombre de mots de votre liste "mots". La boucle passera donc de l'index 0 ("dan") à 5 ("aaa").
Ensuite, le programme vérifie si la longueur du mot courant est supérieure à la longueur du mot le plus long jusqu'à présent. S'il est plus long, vous enregistrez l'index actuel dans la variable «meilleur».
Enfin, il imprime le mot correspondant à cet index.
La boucle for y parcourt la liste d'index créée dynamiquement de 0 à la longueur de mots , qui est de 6. (la plage n'inclut pas le 6ème index. )
Ensuite, si la longueur du mot qui est dans l'index de valeur de l ' index est supérieure au mot le plus long précédemment sélectionné, le nouvel index du mot le plus long sera l'index courant.
/ p>
Trace: meilleur = 0 index = 0
La longueur des mots [index] (dan) est-elle supérieure à la longueur des mots [best] (dan)? Non. Passez à l'itération suivante.
meilleur = 0 index = 1
La longueur des mots [index] (kar) est-elle supérieure à la longueur des mots [best] (dan)? Non. Passez à l'itération suivante.
meilleur = 0 index = 2
La longueur des mots [index] (rêve) est-elle supérieure à la longueur des mots [best] (dan)? Oui. La nouvelle valeur de best est 2.
Votre code itère sur les indices 0, 1, 2, ..., length-1 de la liste nommée words .
La première fois qu'il considère le chaîne de longueur maximale comme celle qui est à l'index 0 c'est-à-dire en définissant best = 0 .
Dans chaque itération, il compare les longueurs de la chaîne courante présent à l'index best avec chaîne présente à l'index index et réinitialisation de la valeur de reste avec un nouvel index si condition len (mots [index ])> len (words [best]) est évalué à Vrai.
De cette façon, après la fin de la boucle for, vous obtenez un index exact de chaîne de longueur maximale.
Donc, si votre intention est d'obtenir la longueur maximale, vous pouvez également calculer la chaîne de longueur maximale et sa longueur.
Voici la seule ligne de code en utilisant réduire () et lambda que vous pouvez utiliser pour obtenir la longueur de la chaîne de longueur maximale disponible dans la liste.
>>> words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"] >>> >>> reduce(lambda a, b: a if len(a) > len(b) else b, words) 'AHAHAHAHAHAHHHAAHAHA' >>> >>> len(reduce(lambda a, b: a if len(a) > len(b) else b, words)) 20 >>>
Il y a déjà un certain nombre de bonnes réponses, mais en voici une autre utilisant l'argument key moins connu pour max:
>>> words = ["dan","kar","dream","adsadsadad","AHAHAHAHAHAHHHAAHAHA","aaa"] >>> max(words, key=len) 'AHAHAHAHAHAHHHAAHAHA'
Modifier : j'ai manqué le commentaire de @Indominus dans ma réponse initiale, il devrait donc avoir tout le mérite: P
Le code ci-dessus fonctionne comme ceci
Ce n'est rien d'autre que l'algorithme de 'Recherche linéaire'.
Prenons le même exemple avec non pas des mots mais des nombres.
nums = [ 9,5,8,6,3,4 ]
#assuming the first element as our biggest number
biggest_number = nums[0]
for i in range(0, len(nums)):
if nums[i] > biggest_number: #comparing each number with the biggest number we assumed
biggest_number = nums[i] #if our current number bigger than biggest_number then replace the value
print(biggest_number)
Dans le code, vous comparez simplement les éléments un par un avec tous les autres éléments et vérifier si l'élément courant satisfait à la condition, qui dans ce cas est s'il est plus grand que les autres ou non, et remplacer les valeurs là où il ne le fait pas; et enfin renvoyer la dernière valeur qui satisfait la condition.
Dans votre code, il s'agit de la longueur de la chaîne.
cela peut aider si vous renommez
bestenlongest_word_so_farplus précisément, renommez
bestenindex_of_longest_word_so_far. aussi, juste pour le plaisir, essayezmax (words, key = len)- pas censé être une réponse mais amusant