Diferença entre del, remove e pop nas listas

>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>> 

Existe alguma diferença entre os três métodos acima para remover um elemento de uma lista?

 448
Author: Martijn Pieters, 2012-07-17

10 answers

SIM, remove remove o primeiro valor , não um índice específico:

>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]

del remove o item num índice específico:

>>> a = [3, 2, 2, 1]
>>> del a[1]
>>> a
[3, 2, 1]

E pop removem o item num índice específico e devolve-o.

>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]

Os 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 not in 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
 645
Author: Martijn Pieters, 2018-08-24 13:38:21

Utilize del Para remover um elemento por índice, pop() para o remover por índice se necessitar do valor devolvido, e remove() Para remover um elemento por valor. Este último requer a pesquisa da lista, e aumenta ValueError Se não ocorrer tal valor na lista.

Ao apagar o índice i de uma lista de n elementos, as complexidades computacionais destes métodos são

del     O(n - i)
pop     O(n - i)
remove  O(n)
 94
Author: Sven Marnach, 2012-07-17 10:34:14

Uma vez que mais ninguém o mencionou, note que del (ao contrário de pop) permite a remoção de uma gama de índices por causa de corte de listas:

>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]

Isto também permite evitar um IndexError se o índice não estiver na lista:

>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
 39
Author: Chris_Rands, 2017-02-27 08:42:59

Já respondeu muito bem por outros. Este do meu lado:

remove vs pop vs del

Evidentemente, pop é o único que devolve o valor, e remove é o único que procura o objecto, enquanto del limita-se a uma simples eliminação.

 28
Author: Saurav Sahu, 2018-06-28 07:00:04

O índice Pop-Takes e devolve o valor

Remove-Takes valor, remove a primeira ocorrência e não devolve nada

Delete-Takes index, remove o valor desse index e não devolve nada

 8
Author: Bahubali Patil, 2018-04-10 12:30:39

Enquanto pop e delete ambos os índices take 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 a exclusão do último elemento.

Se o seu caso de uso é sempre para apagar o último elemento, é sempre preferível usar pop() sobre delete(). Para mais explicações sobre complexidades de tempo, você pode se referir a https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt

 1
Author: skashyap, 2016-09-04 20:22:11

Qualquer operação/função em diferentes estruturas de dados é definida para acções específicas. Aqui no seu caso, isto é, remover um elemento, excluir, Pop e remover. (Se você considerar conjuntos, adicione outra operação-descartar) Outro caso confuso é adicionar. Inserir / Adicionar. Para a demonstração, vamos implementar deque. deque é uma estrutura de dados linear híbrida, onde você pode adicionar elementos / remover elementos de ambas as extremidades.(Extremidades traseira e dianteira)

class Deque(object):

  def __init__(self):

    self.items=[]

  def addFront(self,item):

    return self.items.insert(0,item)
  def addRear(self,item):

    return self.items.append(item)
  def deleteFront(self):

    return self.items.pop(0)
  def deleteRear(self):
    return self.items.pop()
  def returnAll(self):

    return self.items[:]
Aqui, vê o ... operações:
def deleteFront(self):

    return self.items.pop(0)
def deleteRear(self):
    return self.items.pop()
As operações têm de devolver alguma coisa. Então, com e sem índice. Se eu não quiser devolver o valor: del self.itens [0]

Apagar por valor não Índice:

  • Remover:

    list_ez=[1,2,3,4,5,6,7,8]
    for i in list_ez:
        if i%2==0:
            list_ez.remove(i)
    print list_ez
    
O

Devolve [1, 3, 5, 7]

Vamos considerar o caso dos conjuntos.
set_ez=set_ez=set(range(10))

set_ez.remove(11)

# Gives Key Value Error. 
##KeyError: 11

set_ez.discard(11)

# Does Not return any errors.
 1
Author: phanindravarma, 2017-07-10 17:29:41

A operação remover numa lista é dado um valor a remover. Ele procura na lista para encontrar um item com esse valor e apaga o primeiro item correspondente que encontra. É um erro se não houver nenhum item correspondente, aumenta um valor Error .

>>> 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 apagar uma lista inteira. Se você tem um item de lista específica como seu argumento para del (por exemplo, listname[7] para especificamente referenciar o oitavo item da lista), ele apenas irá excluir esse item. É mesmo possível excluir uma "fatia" de uma lista. É um erro se existir um índice fora do intervalo, aumenta 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

A utilização habitual de pop é apagar o último item de uma lista à medida que usa a lista como pilha. Ao contrário do del, o pop devolve o valor que saiu da lista. Você pode, opcionalmente, dar um valor de índice para pop e pop de outro que não o fim da lista (p.ex. listname.o pop (0) irá apagar o primeiro item da lista e devolver esse primeiro item como seu resultado). Você pode usar isso para fazer a lista se comportar como uma fila, mas existem rotinas de bibliotecas disponíveis que podem fornecer operações de fila com melhor desempenho do que pop(0) faz. É um erro se existir um índice fora do intervalo, aumenta 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

Ver colecções.deque para mais detalhes.

 0
Author: Kushan Gunasekera, 2018-08-09 17:13:30
Muitas das melhores explicações estão aqui, mas vou tentar simplificar mais.

Entre todos estes métodos, o reverso & pop São o postfix enquanto o delete é o prefixo .

Remover (): foi usado para remover a primeira ocorrência do elemento

remove(i) => primeira ocorrência do valor I

>>> a = [0, 2, 3, 2, 1, 4, 6, 5, 7]
>>> a.remove(2)   # where i = 2
>>> a
[0, 3, 2, 1, 4, 6, 5, 7]

Pop (): {[17] } ele usou para remover o elemento se:

não especificado

pop() => a partir do final de list

>>>a.pop()
>>>a
[0, 3, 2, 1, 4, 6, 5]

especificado

pop(index) => do Índice

>>>a.pop(2)
>>>a
[0, 3, 1, 4, 6, 5]

Aviso: Método Perigoso à frente

Delete () : é um método de prefixo.

Fique de olho em duas sintaxe diferentes para o mesmo método: [] e (). Possui poder para:

1.Apagar o índice

del a[index] => usado para apagar o índice e o seu valor associado, tal como o pop.

>>>del a[1]
>>>a
[0, 1, 4, 6, 5]

2.Apagar os valores no intervalo [índice 1: índice n]

del a[0:3] => múltiplo valores no intervalo

>>>del a[0:3]
>>>a
[6, 5]

3.Por último, mas não a lista, para apagar a lista inteira numa única fotografia

del (a) => Como disse acima.

>>>del (a)
>>>a
Espero que isto esclareça a confusão.
 0
Author: Mayur Patil, 2018-08-26 16:05:52

Também pode usar o remove para remover um valor por índice.

n = [1, 3, 5]

n.remove(n[1])

N referiria então a [1, 5]

 -3
Author: max runia, 2015-10-29 13:48:00