HOWTO · Python
Remover vários elementos de uma lista em Python
Podemos usar instruções de controle if ... else, compreensões de lista, divisão de lista e loops for para remover vários elementos de uma lista em Python.
Nesta página
Para remover vários itens de uma lista Python, primeiro decida se o critério de seleção se baseia no valor de cada item ou na posição dele. Uma compreensão de lista é útil para filtrar valores e manter a lista original; del altera a lista ao remover um intervalo ou índices conhecidos.
Escolha se deseja remover valores ou índices
Use uma condição quando os próprios itens determinam o que deve permanecer, como ao manter apenas números pares. Use índices quando souber quais posições excluir, independentemente dos valores armazenados nelas. Uma compreensão cria uma nova lista e mantém a lista de origem disponível. del modifica a lista existente, o que importa quando outro código mantém uma referência a ela.
Remova valores que correspondem a uma condição
Este exemplo mantém os valores pares em uma nova lista. Altere o predicado após if para aplicar outra regra, como excluir uma determinada string ou manter valores acima de um limite.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
numbers = [2, 3, 4, 5, 6, 7, 8]
evens = [number for number in numbers if number % 2 == 0]
print("Original:", numbers)
print("Filtered:", evens)
A lista original não é modificada. Evite chamar remove() em uma lista enquanto percorre essa mesma lista: ao excluir um item, os itens restantes mudam de posição, e correspondências consecutivas podem ser ignoradas. Se for necessário modificar a lista no próprio lugar, percorra uma cópia, por exemplo, com for value in numbers.copy():, e remova de numbers os valores correspondentes. Para filtrar, a compreensão é mais curta e evita esse risco de modificação.
Exclua um intervalo contíguo com del e fatiamento
Os índices de uma lista começam em zero. Em um fatiamento start:stop, start é incluído e stop é excluído; assim, del items[2:5] exclui os itens nos índices 2, 3 e 4. Isso altera a própria lista. A mesma regra de intervalo semiaberto facilita entender intervalos adjacentes: a posição final é a do primeiro item que permanece.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
items = ["a", "b", "c", "d", "e", "f"]
del items[2:5]
print(items)
Quando um limite do fatiamento é omitido, usa-se o início ou o fim da lista. Por exemplo, del items[:2] remove os dois primeiros itens, enquanto del items[3:] remove tudo a partir do índice 3. Essas formas são úteis para intervalos contíguos; elas não selecionam posições dispersas.
Exclua índices selecionados com segurança
Quando as posições são dispersas, exclua os índices em ordem decrescente. Remover primeiro um índice maior mantém inalteradas as posições menores. Se os índices forem processados do menor para o maior, cada exclusão deslocará os itens seguintes para a esquerda e mudará a que esses índices se referem.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
items = ["a", "b", "c", "d", "e", "f"]
indexes_to_remove = [0, 2, 5]
for index in sorted(indexes_to_remove, reverse=True):
del items[index]
print(items)
Use índices válidos para a lista como ela está antes das exclusões e evite repetir índices na seleção. Esse padrão modifica items; faça uma cópia primeiro se precisar manter os valores originais disponíveis. Para valores escolhidos por uma condição, em vez da posição, use filtragem.
Escolha a abordagem adequada à sua lista
Escolha uma compreensão de lista para filtrar por valor e produzir um resultado separado. Use del items[start:stop] para modificar a lista e remover um único intervalo contíguo. Para posições conhecidas e dispersas, ordene os índices em ordem decrescente e exclua-os um a um. Esses métodos deixam explícito o critério de seleção e ajudam a evitar alterações acidentais nos itens errados.