Dans mon code, je reçois une erreur d'index - IndexError: index de liste hors de portée. Pourriez-vous s'il vous plaît 1) Expliquez pourquoi est-ce que cela puisse 2) faire des corrections à mon code? Merci pour votre réponse à l'avance
x = [1, 2, 3, 4, 5] for i in range(len(x)): if x[i] % 2 == 0: del x[i]
6 Réponses :
Utilisez une nouvelle liste (compréhension) à la place: ou - considéré "plus pythonique": p>
Ceci est dû au fait que vous retirez des objets à l'intérieur de la boucle, en d'autres termes, ce qui rend la liste plus courte.
Utilisez ceci: p>
x = [value for value in x in value%2 == 0]
Il veut supprimer des articles qui ne sont même pas des index qui sont même
Lorsque vous utilisez Si vous souhaitez supprimer des éléments que je recommande d'utiliser Compréhension de la liste: p> del code>, vous réduisez la taille de votre matrice, mais la boucle initiale traverse la taille initiale de la matrice, d'où l'indexerror.
Vous supprimez des articles de la liste même que vous êtes itération. Une autre approche serait la suivante: sorties: p>
x = [1, 2, 3, 4, 5] for i in range(len(x) -1, -1, -1): if x[i] % 2 == 0: x.pop(i) "range function takes three arguments.First is the start index which is [length of list â 1], that is, the index of last list element(since index of list elements starts from 0 till length â 1).Second argument is the index at which to stop iteration.Third argument is the step size. Since we need to decrease index by 1 in every iteration, this should be -1." - SourceI highly recommend list comprehension however in certain circumstances there is no point and removing through iteration is fine. Up to you~
Utilisez pendant la boucle au lieu de la boucle si vous souhaitez supprimer un élément.
x = [1, 2, 3, 4, 5] i = 0 while i<len(x): if x[i]%2==0: del x[i] i+=1 print(x)
Quelle est votre production attendue?
Ne supprimez pas d'éléments d'une liste que vous êtes actuellement surtout - utilisez plutôt une compréhension de la liste.
Supprimer des articles pendant que vous êtes itération dessus - est une idée super mauvaise :)