"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Ao iterar por meio de uma lista Python, por que você deve evitar a remoção de itens?

Ao iterar por meio de uma lista Python, por que você deve evitar a remoção de itens?

Publicado em 2024-11-18
Navegar:744

When Iterating Through a Python List, Why Should You Avoid Removing Items?

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:

  • del letras[:] para excluir todos elementos e referências ao objeto de lista.
  • letras[:] = [] para atribuir uma nova lista vazia à variável existente, deixando intactas as referências ao objeto original.
  • letras = [] para criar uma nova lista vazia e atribuí-la a uma nova variável.

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)]
Declaração de lançamento Este artigo foi reimpresso em: 1729301595 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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