Il y a plusieurs éléments à supprimer dans la liste, et lorsque je les ai supprimés en boucle sans penser à rien, j'ai trouvé un élément qui correspond aux conditions mais qui n'est pas supprimé.
C'était si simple que je l'ai scanné à partir du haut de la liste et l'ai supprimé, donc la combinaison d'index et d'élément était erronée, et l'élément qui avait été initialement supprimé est resté.
Changé pour analyser la liste dans l'ordre inverse
lst = [1, 2, 3]
for i in lst:
if i in (1, 2):
lst.remove(i)
print(lst)
#Résultat d'exécution
[2, 3]
lst = [1, 2, 3]
for I in reversed(lst):
if i in (1, 2):
lst.remove(i)
print(lst)
#Résultat d'exécution
[3]
Si vous le supprimez du haut de la liste, les éléments seront compressés, mais l'index restera le même. Par conséquent, l'élément supprimé suivant est compressé et non traité. La suppression de la liste à l'arrière empêche le prochain élément à juger d'être emballé.
>>> lst = [1, 2, 3]
>>> for i, l in enumerate(lst):
... print("index:%s, value:%s, list:%s" % (i, l, lst))
... if l in (1, 2):
... lst.remove(l)
... print("index:%s, value:%s, list:%s" % (i, l, lst))
...
index:0, value:1, list:[1, 2, 3]
index:0, value:1, list:[2, 3]
index:1, value:3, list:[2, 3]
index:1, value:3, list:[2, 3]
Puisque la valeur est «3» lorsque l'indice est «1», «2», qui devrait être supprimé par le jugement, n'est pas traité. (Si l'index est «1», la valeur est «2» selon la liste d'origine) Faites ceci dans l'ordre inverse.
>>> lst = [1, 2, 3]
>>> for i, l in enumerate(reversed(lst)):
... print("index:%s, value:%s, list:%s" % (i, l, lst))
... if l in (1, 2):
... lst.remove(l)
... print("index:%s, value:%s, list:%s" % (i, l, lst))
...
index:0, value:3, list:[1, 2, 3]
index:0, value:3, list:[1, 2, 3]
index:1, value:2, list:[1, 2, 3]
index:1, value:2, list:[1, 3]
index:2, value:1, list:[1, 3]
index:2, value:1, list:[3]
Jusqu'à présent, lors de la suppression avec ** élément **. Une chose à faire attention est lors de la suppression avec ** index **. Lors de la suppression avec ** index **, cette méthode d'écriture entraînera une erreur.
>>> lst = [1, 2, 3]
>>> for i, l in enumerate(reversed(lst)):
... print("index:%s, value:%s, list:%s" % (i, l, lst))
... if l in (1, 2):
... del lst[i]
... print("index:%s, value:%s, list:%s" % (i, l, lst))
...
index:0, value:3, list:[1, 2, 3]
index:0, value:3, list:[1, 2, 3]
index:1, value:2, list:[1, 2, 3]
index:1, value:2, list:[1, 3]
index:2, value:1, list:[1, 3]
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
IndexError: list assignment index out of range
Dans ce cas, il peut être traité comme suit.
>>> lst = [1, 2, 3]
>>> for i, l in reversed(list(enumerate(lst))):
... print("index:%s, value:%s, list:%s" % (i, l, lst))
... if l in (1, 2):
... del lst[i]
... print("index:%s, value:%s, list:%s" % (i, l, lst))
...
index:2, value:3, list:[1, 2, 3]
index:2, value:3, list:[1, 2, 3]
index:1, value:2, list:[1, 2, 3]
index:1, value:2, list:[1, 3]
index:0, value:1, list:[1, 3]
index:0, value:1, list:[3]
Recommended Posts