Listas Python: Armadilhas da remoção de itens durante a iteração
Iterar uma lista Python enquanto remove itens simultaneamente pode levar a um comportamento inesperado. Um exemplo notável é o seguinte:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
Intrigativamente, a impressão final das cartas revela que apenas todos os outros itens foram removidos.
Motivo da anomalia
Esse comportamento decorre da maneira como o Python lida com modificações nos iteráveis durante a iteração. A documentação afirma explicitamente que modificar uma sequência que está sendo iterada geralmente não é seguro, especialmente para tipos mutáveis como listas.
Essa prática pode levar a um comportamento indefinido e possíveis mudanças em futuras compilações do Python.
Abordagem correta para remover todos os itens
Para remover com segurança todos os itens de uma lista, use qualquer um dos seguintes métodos:
Tratamento de remoção condicional de itens
Para remoção condicional de itens, crie uma cópia do lista usando a sintaxe de fatia [:]:
commands = ["ls", "cd", "rm -rf /"]
for cmd in commands[:]:
if "rm " in cmd:
commands.remove(cmd)
Como alternativa, use a função de filtro para excluir itens indesejados:
commands = [cmd for cmd in commands if not is_malicious(cmd)]
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3