0
votes

Pourquoi est-ce que je reçois un indexError: index de liste hors de portée

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]


3 commentaires

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 :)


6 Réponses :


2
votes

Utilisez une nouvelle liste (compréhension) à la place: xxx

ou - considéré "plus pythonique": xxx


0 commentaires

1
votes

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]


1 commentaires

Il veut supprimer des articles qui ne sont même pas des index qui sont même



2
votes

Lorsque vous utilisez del , vous réduisez la taille de votre matrice, mais la boucle initiale traverse la taille initiale de la matrice, d'où l'indexerror.

Si vous souhaitez supprimer des éléments que je recommande d'utiliser Compréhension de la liste: xxx


0 commentaires

0
votes

Vous supprimez des articles de la liste même que vous êtes itération. Une autre approche serait la suivante: xxx

sorties: xxx


0 commentaires

0
votes
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~

0 commentaires

0
votes

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)


0 commentaires