Listas de Python: errores de la eliminación de elementos durante la iteración
La iteración a través de una lista de Python mientras se eliminan elementos al mismo tiempo puede provocar un comportamiento inesperado. Un ejemplo notable es el siguiente:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
Curiosamente, la impresión final de las cartas revela que solo se han eliminado todos los demás elementos.
Razón de la anomalía
Este comportamiento se debe a la forma en que Python maneja las modificaciones de los iterables durante la iteración. La documentación establece explícitamente que modificar una secuencia que se está iterando generalmente no es seguro, especialmente para tipos mutables como listas.
Esta práctica puede generar un comportamiento indefinido y posibles cambios en futuras compilaciones de Python.
Enfoque correcto para eliminar todos los elementos
Para eliminar de forma segura todos los elementos de una lista, utilice cualquiera de los siguientes métodos:
Manejo condicional Eliminación de elementos
Para la eliminación condicional de elementos, cree una copia de la lista usando la sintaxis de segmento [:]:
commands = ["ls", "cd", "rm -rf /"]
for cmd in commands[:]:
if "rm " in cmd:
commands.remove(cmd)
Como alternativa, use la función de filtro para excluir elementos no deseados:
commands = [cmd for cmd in commands if not is_malicious(cmd)]
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3