J'ai essayé de résoudre la question ci-dessous sur codingbat:
"Étant donné un tableau d'entiers, renvoie True si la séquence de nombres 1, 2, 3 apparaît quelque part dans le tableau".
C'était ma solution qui a renvoyé l'erreur "index hors plage":
def array123(nums):
for i in range(len(nums)-2):
if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
return True
return False
C'était la solution de Codingbat:
def array123(nums):
for i in range(len(nums)):
if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
return True
return False
Je sais que je rate un truc ici. Quelqu'un pourrait-il expliquer pourquoi je dois itérer sur la plage (len (nums) -2) ??
Merci.
3 Réponses :
ce n'est pas exactement une solution étonnante non plus, ce serait correct:
True
def array123(nums):
for i in range(len(nums)-2):
if nums[i:i+3] == [1,2,3]:
return True
return False
print(array123([1,2,3]))
la principale différence entre votre code et celui de codingbat est la façon dont la plage est utilisée
votre plage est la longueur de la liste, non? Donc, puisque vous ajoutez à l'index de 2 au cas le plus élevé, nous ne devrions itérer que jusqu'à la longueur - 2, car tout ce qui dépasse l'index le plus élevé
Ils ont utilisé len (num) -2, de sorte que le num [i + 2] pointe vers le dernier élément et non vers un index en dehors du num
C'est parce que vous vérifiez les éléments i, i + 1 et i + 2 de la boucle. La condition est de vérifier 1, 2, 3 dans le tableau n'importe où. et dans les index python commençant à zéro, donc range (len (num) -2) le fait itérer sur 0 à 7, s'il s'agit d'un tableau de 10 éléments.
Puisque vous accédez à 3 nombres à la fois, il vous suffit d'itérer jusqu'à
range(len(nums)-2).Eh bien, dans vos propres mots, quelles valeurs de
iallez-vous créer avec chaque solution? Que se passe-t-il lorsque vous essayez d'utiliseri+2pour indexer ennums, lorsqueiest la plus grande valeur possible?