Списки Python: подводные камни удаления элементов во время итерации
Итерация по списку Python с одновременным удалением элементов может привести к неожиданному поведению. Ярким примером является следующий:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
Как ни странно, окончательный отпечаток букв показывает, что были удалены только все остальные элементы.
Причина аномалии
Такое поведение связано с тем, как Python обрабатывает изменения в итерациях во время итерации. В документации прямо указано, что изменение повторяемой последовательности, как правило, небезопасно, особенно для изменяемых типов, таких как списки.
Такая практика может привести к неопределенному поведению и потенциальным изменениям в будущих сборках Python.
Правильный подход к удалению всех элементов
Чтобы безопасно удалить все элементы из списка, используйте любой из следующих методов:
Обработка условного удаления элементов
Для условного удаления элементов создайте копию список с использованием синтаксиса фрагмента [:]:
commands = ["ls", "cd", "rm -rf /"]
for cmd in commands[:]:
if "rm " in cmd:
commands.remove(cmd)
Альтернативно используйте функцию фильтра для исключения нежелательных элементов:
commands = [cmd for cmd in commands if not is_malicious(cmd)]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3