Solución del error al eliminar elementos de una lista dentro de un loop.

Comunmente puede darse el caso que querramos eliminar un item de una lista de Python si se cumple una determinada condición. El problema está en que no podemos eliminar elementos de la lista sobre la cual estamos iterando (o sea, la lista que está dentro del loop).

Por ejemplo, si tenemos una lista con nombres de archivos y queremos eliminar todos los que tengan la extensión .txt, podemos hacer algo como esto:

lista1 = ["file1.txt", "file2.txt", "file3.doc", "file4.txt"]

eliminar_extension = ".txt"

for x in lista1:
	if eliminar_extension in x:
		lista1.remove(x)

print lista1

El output de este script sería:

>>['file2.txt', 'file3.doc']


 Con lo cual nos queda claro que algo está saliendo mal porque en el output sólo debería venir el file3.doc que es el único en la lista sin la extensión .txt

La solución a este problema está en clonar la lista original y hacer el loop sobre la misma PERO, eliminar los items de la lista clonada y no de la original. Quedaría algo así:

lista1 = ["file1.txt", "file2.txt", "file3.doc", "file4.txt"]
lista2 = lista[:]

eliminar_extension = ".txt"

for x in lista1:
	if eliminar_extension in x:
		lista2.remove(x)

print lista2

Aquí el output sería como debe de ser:

>>['file3.doc']


Artículos Relacionados