Sim, removeremove o primeiro valor correspondente , não um índice específico:
>>> a =[0,2,3,2]>>> a.remove(2)>>> a
[0,3,2]
del remove o item em um índice específico:
>>> a =[9,8,7,6]>>>del a[1]>>> a
[9,7,6]
e popremove o item em um índice específico e o retorna.
>>> a =[4,3,5]>>> a.pop(1)3>>> a
[4,5]
Seus modos de erro também são diferentes:
>>> a =[4,5,6]>>> a.remove(7)Traceback(most recent call last):File"<stdin>", line 1,in<module>ValueError: list.remove(x): x notin list
>>>del a[7]Traceback(most recent call last):File"<stdin>", line 1,in<module>IndexError: list assignment index out of range
>>> a.pop(7)Traceback(most recent call last):File"<stdin>", line 1,in<module>IndexError: pop index out of range
Use delpara remover um elemento por índice, pop()para removê-lo por índice, se você precisar do valor retornado, e remove()para excluir um elemento por valor. O último requer pesquisa na lista e aumenta ValueErrorse esse valor não ocorrer na lista.
Ao excluir o índice ide uma lista de nelementos, as complexidades computacionais desses métodos são
+1 para detalhamento da complexidade. Ilustra como excluir e pop são constantes quando o elemento está no final da lista.
Big Sharpie
2
Lembre-se, pessoal ... qualquer coisa com base no índice é um tiro O (n-1) ... se você precisar fazer uma pesquisa (por valor), ele percorrerá a coleção até que o elemento seja encontrado.
Pepito Fernandez 14/10
2
@PepitoFernandez As pesquisas por índice em uma lista são O (1) em Python. (A lista em Python é semelhante a um vector em C ++.)
Sven Marnach
3
@PlasmaBinturong Você deve usar o que acha mais legível, a menos que tenha dados que comprovem que o desempenho é importante. E se você tiver, precisará medir o que é mais rápido no seu caso específico. Meu palpite também é que delé um pouco mais rápido, mas por um motivo diferente: a pesquisa __delitem__em um tipo implementado em C acontece por índice e não por nome, enquanto que popprecisa ser pesquisada seguindo todo o protocolo do descritor. A execução das próprias funções deve levar a mesma quantidade de tempo. Ambos retornam um ponteiro - um para o objeto removido e o outro para None.
Sven Marnach 29/11/19
92
Como ninguém mais o mencionou, observe que del(ao contrário pop) permite a remoção de um intervalo de índices devido ao fatiamento da lista:
>>> lst =[3,2,2,1]>>>del lst[1:]>>> lst
[3]
Isso também permite evitar um IndexErrorse o índice não estiver na lista:
Thnx! Uma observação: em python, devido à maneira como as listas são implementadas (há praticamente matrizes ...!), "Avançar até a posição do nó" é O (1)
ntg 28/11/18
19
pop - Pega índice e retorna valor
remove - Pega valor, remove a primeira ocorrência e não retorna nada
delete - pega o índice, remove o valor nesse índice e não retorna nada
Qualquer operação / função em diferentes estruturas de dados é definida para ações específicas. Aqui no seu caso, ou seja, removendo um elemento, exclua, pop e remova. (Se você considerar conjuntos, adicione outra operação - descartar). Outro caso confuso é ao adicionar. Inserir / Anexar. Para demonstração, vamos implementar deque. deque é uma estrutura de dados linear híbrida, na qual é possível adicionar elementos / remover elementos de ambas as extremidades.
Enquanto pop e delete ambos assumem índices para remover um elemento como indicado nos comentários acima. Uma diferença fundamental é a complexidade do tempo para eles. A complexidade de tempo para pop () sem índice é O (1), mas não é o mesmo caso para exclusão do último elemento.
Isso está errado de várias maneiras. Não existe um método como delete. As diferenças são que popretorna o valor e delfunciona em fatias. Nos casos em que popfunciona, delpossui exatamente a mesma complexidade computacional (e é um pouco mais rápida por um termo constante).
abarnert
1
A operação de remoção em uma lista recebe um valor para remover. Ele pesquisa na lista para encontrar um item com esse valor e exclui o primeiro item correspondente encontrado. É um erro se não houver item correspondente, gera um ValueError .
>>> x =[1,0,0,0,3,4,5]>>> x.remove(4)>>> x
[1,0,0,0,3,5]>>>del x[7]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[7]IndexError: list assignment index out of range
A instrução del pode ser usada para excluir uma lista inteira. Se você tem um item de lista específico como argumento a ser deletado (por exemplo, nome da lista [7] para referenciar especificamente o 8º item da lista), ele simplesmente exclui esse item. É até possível excluir uma "fatia" de uma lista. É um erro se o índice fora do intervalo gerar um IndexError .
>>> x =[1,2,3,4]>>>del x[3]>>> x
[1,2,3]>>>del x[4]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[4]IndexError: list assignment index out of range
O uso usual do pop é excluir o último item de uma lista à medida que você usa a lista como uma pilha. Ao contrário de del, pop retorna o valor que saiu da lista. Opcionalmente, você pode atribuir um valor de índice para pop e pop a partir do final da lista (por exemplo, listname.pop (0) excluirá o primeiro item da lista e retornará esse primeiro item como resultado). Você pode usar isso para fazer a lista se comportar como uma fila, mas existem rotinas de biblioteca disponíveis que podem fornecer operações de fila com melhor desempenho do que o pop (0). É um erro se o índice fora do intervalo gerar um IndexError .
>>> x =[1,2,3]>>> x.pop(2)3>>> x
[1,2]>>> x.pop(4)Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>
x.pop(4)IndexError: pop index out of range
Remover basicamente funciona no valor. Excluir e exibir trabalho no índice
Remover basicamente remove o primeiro valor correspondente. Excluir exclui o item de um índice específico. O Pop basicamente pega um índice e retorna o valor nesse índice. Na próxima vez que você imprimir a lista, o valor não aparecerá.
Apesar de agradecermos sua resposta, seria melhor se ela fornecesse valor adicional além das outras respostas. Nesse caso, sua resposta não fornece valor adicional, pois outros usuários cobriram tudo o que você incluiu em sua resposta. Como um problema secundário, não inclua texto como imagens quando puder colá-lo como texto. Se uma resposta anterior foi útil para você, você deve votar .
David Buck
-3
Você também pode usar remove para remover um valor pelo índice também.
@abarnert, seu caso de uso funciona em sincronia com o caso abaixo n = [5,3,5], depois n.remove (5). Ambos removem o primeiro elemento encontrado da lista.
Akhil Ghatiki 31/03
@AkhilGhatiki n.remove(n[2])remove n[0], não n[2]. Portanto, não é apenas tempo linear sem motivo (talvez não um grande negócio quando N = 3), também é errado (um grande negócio não importa o que N é)
Respostas:
Sim,
remove
remove o primeiro valor correspondente , não um índice específico:del
remove o item em um índice específico:e
pop
remove o item em um índice específico e o retorna.Seus modos de erro também são diferentes:
fonte
del
não é uma manutenção de sintaxe, não. A sintaxe é inalterada, assim comoreturn
ouif
ouwhile
.del
exemplo é um pouco enganador. Qual elemento é removido, exatamente? O 2º ou o 3º? Você deveria ter usado[9, 8, 7, 6]
,del a[1]
e[9, 7, 6]
Use
del
para remover um elemento por índice,pop()
para removê-lo por índice, se você precisar do valor retornado, eremove()
para excluir um elemento por valor. O último requer pesquisa na lista e aumentaValueError
se esse valor não ocorrer na lista.Ao excluir o índice
i
de uma lista den
elementos, as complexidades computacionais desses métodos sãofonte
del
é um pouco mais rápido, mas por um motivo diferente: a pesquisa__delitem__
em um tipo implementado em C acontece por índice e não por nome, enquanto quepop
precisa ser pesquisada seguindo todo o protocolo do descritor. A execução das próprias funções deve levar a mesma quantidade de tempo. Ambos retornam um ponteiro - um para o objeto removido e o outro paraNone
.Como ninguém mais o mencionou, observe que
del
(ao contráriopop
) permite a remoção de um intervalo de índices devido ao fatiamento da lista:Isso também permite evitar um
IndexError
se o índice não estiver na lista:fonte
Já respondeu muito bem por outros. Este do meu fim :)
Evidentemente,
pop
é o único que retorna o valor eremove
é o único que pesquisa o objeto, enquanto sedel
limita a uma simples exclusão.fonte
pop - Pega índice e retorna valor
remove - Pega valor, remove a primeira ocorrência e não retorna nada
delete - pega o índice, remove o valor nesse índice e não retorna nada
fonte
Muitas das melhores explicações estão aqui, mas tentarei o meu melhor para simplificar mais.
Entre todos esses métodos, reverse e pop são postfix, enquanto delete é prefixo .
remove (): usado para remover a primeira ocorrência do elemento
remove(i)
=> primeira ocorrência do valor ipop (): usado para remover o elemento se:
não especificado
pop()
=> do fim da listaEspecificadas
pop(index)
=> do índiceAVISO: Método perigoso adiante
delete () : é um método de prefixo.
Fique de olho em duas sintaxes diferentes para o mesmo método: [] e (). Possui poder para:
1. índice de exclusão
del a[index]
=> usado para excluir o índice e seu valor associado, assim como pop.2.Excluir valores no intervalo [índice 1: índice N]
del a[0:3]
=> vários valores no intervalo3.Última, mas não a lista, para excluir a lista inteira de uma só vez
del (a)
=> como dito acima.Espero que isso esclareça a confusão, se houver.
fonte
Qualquer operação / função em diferentes estruturas de dados é definida para ações específicas. Aqui no seu caso, ou seja, removendo um elemento, exclua, pop e remova. (Se você considerar conjuntos, adicione outra operação - descartar). Outro caso confuso é ao adicionar. Inserir / Anexar. Para demonstração, vamos implementar deque. deque é uma estrutura de dados linear híbrida, na qual é possível adicionar elementos / remover elementos de ambas as extremidades.
Aqui, veja as operações:
As operações precisam retornar algo. Então, pop - com e sem um índice. Se não quiser retornar o valor: del self.items [0]
Excluir por valor, não índice:
retirar :
Retornos [1,3,5,7]
vamos considerar o caso dos conjuntos.
fonte
Enquanto pop e delete ambos assumem índices para remover um elemento como indicado nos comentários acima. Uma diferença fundamental é a complexidade do tempo para eles. A complexidade de tempo para pop () sem índice é O (1), mas não é o mesmo caso para exclusão do último elemento.
Se o seu caso de uso é sempre para excluir o último elemento, é sempre preferível usar pop () em vez de delete (). Para obter mais explicações sobre a complexidade do tempo, consulte https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
fonte
delete
. As diferenças são quepop
retorna o valor edel
funciona em fatias. Nos casos em quepop
funciona,del
possui exatamente a mesma complexidade computacional (e é um pouco mais rápida por um termo constante).A operação de remoção em uma lista recebe um valor para remover. Ele pesquisa na lista para encontrar um item com esse valor e exclui o primeiro item correspondente encontrado. É um erro se não houver item correspondente, gera um ValueError .
A instrução del pode ser usada para excluir uma lista inteira. Se você tem um item de lista específico como argumento a ser deletado (por exemplo, nome da lista [7] para referenciar especificamente o 8º item da lista), ele simplesmente exclui esse item. É até possível excluir uma "fatia" de uma lista. É um erro se o índice fora do intervalo gerar um IndexError .
O uso usual do pop é excluir o último item de uma lista à medida que você usa a lista como uma pilha. Ao contrário de del, pop retorna o valor que saiu da lista. Opcionalmente, você pode atribuir um valor de índice para pop e pop a partir do final da lista (por exemplo, listname.pop (0) excluirá o primeiro item da lista e retornará esse primeiro item como resultado). Você pode usar isso para fazer a lista se comportar como uma fila, mas existem rotinas de biblioteca disponíveis que podem fornecer operações de fila com melhor desempenho do que o pop (0). É um erro se o índice fora do intervalo gerar um IndexError .
Veja collections.deque para mais detalhes.
fonte
Remover basicamente funciona no valor. Excluir e exibir trabalho no índice
Remover basicamente remove o primeiro valor correspondente. Excluir exclui o item de um índice específico. O Pop basicamente pega um índice e retorna o valor nesse índice. Na próxima vez que você imprimir a lista, o valor não aparecerá.
fonte
Você também pode usar remove para remover um valor pelo índice também.
n se referiria a [1, 5]
fonte
n = [5, 3, 5]
entãon.remove(n[2])
.n.remove(n[2])
removen[0]
, nãon[2]
. Portanto, não é apenas tempo linear sem motivo (talvez não um grande negócio quando N = 3), também é errado (um grande negócio não importa o que N é)