Como faço para remover um elemento de uma lista por índice em Python?
Encontrei o list.remove
método, mas digamos que quero remover o último elemento, como faço para fazer isso? Parece que a remoção padrão pesquisa na lista, mas não quero que nenhuma pesquisa seja realizada.
O(n)
em operação no tempo.deque()
fornece operações eficientes em ambas as extremidades, mas não fornece O (1) inserções / pesquisas / exclusões no meio.O(n)
acesso ao índicea[i]
(devido a listas vinculadas). Nota: a implementação baseada em matriz forneceO(1)
acesso ao índice.Respostas:
Use
del
e especifique o índice do elemento que você deseja excluir:Também suporta fatias:
Aqui está a seção do tutorial.
fonte
PyList_GetItem()
essencialmente retorna((PyListObject *)op) -> ob_item[i];
- oi
ésimo elemento de uma matriz.Você provavelmente quer
pop
:Por padrão,
pop
sem argumentos, remove o último item:fonte
pop()
por si só, é muito óbvio, enquantopop(-1)
é potencialmente confuso precisamente porque é redundante.pop
na maioria das linguagens de programação geralmente remove o último item, como acontece no Python. Portanto, se você especificar -1 ou nada é o mesmo.pop()
retorna qualquer elemento que ele removeu.Como outros mencionados, pop e del são as maneiras eficientes de remover um item de um determinado índice. No entanto, apenas para fins de conclusão (já que a mesma coisa pode ser feita de várias maneiras no Python):
Usando fatias (isso não remove o item da lista original):
(Além disso, este será o método menos eficiente ao trabalhar com a lista Python, mas isso pode ser útil (mas não eficiente, reitero) ao trabalhar com objetos definidos pelo usuário que não suportam pop, mas definem a
__getitem__
):Nota: Observe que este método não modifica a lista no local como
pop
edel
. Em vez disso, ele faz duas cópias das listas (uma desde o início até o índice, mas sem ela (a[:index]
) e uma após o índice até o último elemento (a[index+1:]
)) e cria um novo objeto de lista adicionando ambas. Isso é reatribuído à variável da lista (a
). Portanto, o objeto de lista antigo é desreferenciado e, portanto, coletado de lixo (desde que o objeto de lista original não seja referenciado por nenhuma variável que não seja a).Isso torna esse método muito ineficiente e também pode produzir efeitos colaterais indesejáveis (especialmente quando outras variáveis apontam para o objeto de lista original que permanece inalterado).
Obrigado a @MarkDickinson por apontar isso ...
Esta resposta de estouro de pilha explica o conceito de fatiar.
Observe também que isso funciona apenas com índices positivos.
Ao usar com objetos, o
__getitem__
método deve ter sido definido e, mais importante, o__add__
método deve ter sido definido para retornar um objeto contendo itens de ambos os operandos.Em essência, isso funciona com qualquer objeto cuja definição de classe seja como:
Isso funciona com o
list
qual define__getitem__
e__add__
métodos.Comparação das três formas em termos de eficiência:
Suponha que o seguinte seja predefinido:
O
del object[index]
método:De longe, o método mais eficiente. Funciona com todos os objetos que definem um
__del__
método.A desmontagem é a seguinte:
Código:
Desmontagem:
pop
método:É menos eficiente que o método del e é usado quando você precisa obter o item excluído.
Código:
Desmontagem:
A fatia e o método add.
O menos eficiente.
Código:
Desmontagem:
Nota: Nas três desmontagens, ignore as duas últimas linhas que basicamente são
return None
. Além disso, as duas primeiras linhas estão carregando os valores globaisa
eindex
.fonte
a = a[:index] + a[index+1 :]
-trick foi o mais sábio, quando se trata de listas enormes. Todos os outros métodos acabaram em um impasse. Então, muito obrigadopop
também é útil para remover e manter um item de uma lista. Ondedel
realmente destrói o item.fonte
Se você deseja remover o elemento de posição específico em uma lista, como os 2º, 3º e 7º. você não pode usar
Desde que você exclui o segundo elemento, o terceiro elemento que você exclui é o quarto elemento na lista original. Você pode filtrar o 2º, 3º e 7º elemento da lista original e obter uma nova lista, como abaixo:
fonte
Isso depende do que você quer fazer.
Se você deseja retornar o elemento que removeu, use
pop()
:No entanto, se você deseja excluir um elemento, use
del
:Além disso,
del
permite usar fatias (por exemplodel[2:]
).fonte
Geralmente, estou usando o seguinte método:
fonte
Outra maneira de remover um elemento (s) de uma lista por índice.
a [x: y] aponta para os elementos do índice
x
paray-1
. Quando declaramos essa parte da lista como uma lista vazia ([]
), esses elementos são removidos.fonte
Você pode simplesmente procurar o item que deseja excluir. É realmente simples. Exemplo:
Saída: acde
fonte
Use o código a seguir para remover o elemento da lista:
Se você deseja remover os dados do elemento de índice da lista, use:
fonte
Como mencionado anteriormente, a melhor prática é del (); ou pop () se você precisar conhecer o valor.
Uma solução alternativa é empilhar novamente apenas os elementos que você deseja:
eta: hmm ... não funcionará em valores de índice negativos, ponderará e atualizará
Eu suponho
iria consertá-lo ... mas de repente essa idéia parece muito quebradiça. Experiência de pensamento interessante embora. Parece que deve haver uma maneira 'apropriada' de fazer isso com a compreensão append () / list.
ponderando
fonte
del()
? Para essa função, você fornece a lista como o primeiro argumento dessa função e depois o índice, ou o índice primeiro e depois a lista? Ele retorna o argumento da lista sem o item ou faz a exclusão no local. Eu sei sobre adel
declaração, mas não sobre uma função com o mesmo nome.Não parece que você está trabalhando com uma lista de listas, então vou manter isso breve. Você deseja usar o pop, pois ele removerá elementos e não elementos que são listas; você deve usar del para isso. Para chamar o último elemento em python, é "-1"
fonte
pop()
edel
ambos removem um elemento no índice fornecido, independentemente de esse elemento ser uma lista ou não.a = [1, [2, 3], 4]; del a[1]; b = [1, [2, 3], 4]; b.pop(1); assert a == b
l - lista de valores; temos que remover índices da lista inds2rem .
fonte
<map at 0x7f4d54109a58>
. e l é o intervalo (0,20)Use a função "del" :
Por exemplo, se você deseja remover os três últimos itens, seu código deve ser:
Por exemplo, se você deseja remover os últimos 8 itens, seu código deve ser:
fonte
del
é uma afirmação . Se fosse uma função, você teria que escrever #del(listame[-N])
Já foi mencionado como remover um único elemento de uma lista e quais as vantagens dos diferentes métodos. Observe, no entanto, que a remoção de vários elementos tem algum potencial para erros:
Os elementos 3 e 8 (não 3 e 7) da lista original foram removidos (como a lista foi reduzida durante o loop), o que pode não ter sido a intenção. Se você deseja remover com segurança vários índices, exclua primeiro os elementos com o índice mais alto, por exemplo:
fonte
Ou se vários índices devem ser removidos:
Claro que também poderia fazer:
fonte
Você pode usar del ou pop para remover o elemento da lista com base no índice. O pop imprimirá o membro que está removendo da lista, enquanto a lista exclui esse membro sem imprimi-lo.
fonte
Pode-se usar del ou pop, mas eu prefiro del, já que você pode especificar índice e fatias, dando ao usuário mais controle sobre os dados.
Por exemplo, começando com a lista mostrada, é possível remover o último elemento com
del
uma fatia e, em seguida, remover o último elemento do resultado usandopop
.fonte