Bucle incorrecto al eliminar elementos de las listas
Al iterar sobre una lista y eliminar elementos dentro del bucle, puede encontrar un comportamiento inesperado. Considere el siguiente código:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
print(letters)
En lugar de eliminar todos los elementos como se esperaba, este código genera el siguiente resultado:
['b', 'd', 'f', 'h', 'j', 'l']
Este comportamiento aparentemente extraño se explica en la documentación de Python:
[No]es seguro modificar la secuencia que se repite en el bucle. Si necesita modificar la lista sobre la que está iterando, debe iterar sobre una copia.
En este caso específico, la variable de iteración i se actualiza después de eliminar un elemento, lo que provoca que el índice del siguiente elemento en el bucle que se va a omitir.
Reescritura para una eliminación precisa de elementos
Para corregir este comportamiento, debe iterar sobre una copia de la lista o usar Métodos alternativos para eliminar elementos. Aquí hay tres opciones:
del letters[:]
letters[:] = []
letters = []
Alternativamente, si es necesario eliminar elementos específicos según una condición, puede filtrar la lista usando una función de comprensión o filtro():
letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]
letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))
Al seguir estas pautas, puede garantizar una eliminación precisa y eficiente de elementos de las listas en Python .
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