0
votes

Débutant Python - Question sur l'itération de la boucle for

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.


2 commentaires

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 i allez-vous créer avec chaque solution? Que se passe-t-il lorsque vous essayez d'utiliser i+2 pour indexer en nums , lorsque i est la plus grande valeur possible?


3 Réponses :


1
votes

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é


0 commentaires

1
votes

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


0 commentaires

1
votes

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.


0 commentaires