Como han dicho otras respuestas, la mejor manera de hacerlo es haciendo una nueva lista: itere sobre una copia o construya una lista con solo los elementos que desee y asígnela a la misma variable. La diferencia entre estos depende de su caso de uso, ya que afectan a otras variables para la lista original de manera diferente (o, más bien, el primero los afecta, el segundo no).
Si una copia no es una opción por alguna razón, tiene otra opción que depende de la comprensión de por qué modificar una lista que está iterando se rompe.La iteración de lista funciona haciendo un seguimiento de un índice, incrementándolo cada vez que pasa el ciclo hasta que cae al final de la lista. Por lo tanto, si elimina en (o antes) el índice actual, todo desde ese punto hasta el final cambia un punto a la izquierda. Pero el iterador no sabe nada al respecto y omite de manera efectiva el siguiente elemento, ya que ahora está en el índice actual en lugar de en el siguiente. Sin embargo, al eliminar elementos que son después de, el índice actual no afecta las cosas.
Esto implica que si repite la lista al revés, si elimina un elemento en el índice actual, todo lo que está a la derecha se desplaza a la izquierda, pero eso no importa, ya que ya ha tratado con todos los elementos a la derecha de la posición actual, y te mueves hacia la izquierda: el siguiente elemento a la izquierda no se ve afectado por el cambio, por lo que el iterador te da el elemento que esperas.
TL; DR:
>>> a = list(range(5))
>>> for b in reversed(a):
if b == 3:
a.remove(b)
>>> a
[0, 1, 2, 4]
Sin embargo, hacer una copia suele ser mejor en términos de hacer su código fácil de leer. Solo menciono esta posibilidad para completar.
¿Por qué necesita eliminarlos al mismo tiempo? Simplemente itere y elimine toda la lista. ¿De verdad necesita imprimir cada artículo? – jamylak
Pero confío en los elementos de la lista cuando itero sobre el ciclo. Debo deshacerme del artículo inmediatamente si coincide con una condición – alwbtc