Sí, removeelimina el primer valor coincidente , no un índice específico:
>>> a =[0,2,3,2]>>> a.remove(2)>>> a
[0,3,2]
del elimina el elemento en un índice específico:
>>> a =[9,8,7,6]>>>del a[1]>>> a
[9,7,6]
y popelimina el elemento en un índice específico y lo devuelve.
>>> a =[4,3,5]>>> a.pop(1)3>>> a
[4,5]
Sus modos de error también son 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 eliminar un elemento por índice, pop()para eliminarlo por índice si necesita el valor devuelto, y remove()para eliminar un elemento por valor. Esto último requiere buscar en la lista, y aumenta ValueErrorsi no se produce dicho valor en la lista.
Al eliminar el índice ide una lista de nelementos, las complejidades computacionales de estos métodos son
+1 por desglose de complejidad. Ilustra cómo eliminar y hacer pop son constantes cuando el elemento está al final de la lista.
Big Sharpie
2
Recuerde chicos ... todo lo que se base en un índice es un disparo O (n-1) ... si tiene que hacer una búsqueda (por valor), atravesará la colección hasta que se encuentre el elemento.
Pepito Fernández
2
@PepitoFernandez Las búsquedas por índice en una lista son O (1) en Python. (Una lista en Python es similar a un vector en C ++.)
Sven Marnach
3
@PlasmaBinturong Debe usar lo que cree que es más legible, a menos que tenga datos que demuestren que el rendimiento es importante. Y si es así, debe medir qué es más rápido en su caso específico. Supongo que también deles un poco más rápido, pero por una razón diferente: la búsqueda de __delitem__un tipo implementado en C ocurre por índice en lugar de por nombre, mientras popque debe buscarse siguiendo el protocolo descriptor completo. La ejecución de las funciones mismas debería llevar la misma cantidad de tiempo. Ambos devuelven un puntero, uno al objeto eliminado y el otro a None.
Sven Marnach
92
Como nadie más lo ha mencionado, tenga en cuenta que del(a diferencia de pop) permite la eliminación de un rango de índices debido al corte de la lista:
>>> lst =[3,2,2,1]>>>del lst[1:]>>> lst
[3]
Esto también permite evitar un IndexErrorsi el índice no está en la lista:
Thnx! Una nota: en python, debido a la forma en que se implementan las listas (¡prácticamente hay matrices ...!), "Avanzar hasta la posición de ese nodo" es O (1)
ntg
19
pop: toma el índice y devuelve el valor
remove: toma valor, elimina la primera aparición y no devuelve nada
eliminar: toma el índice, elimina el valor en ese índice y no devuelve nada
Cualquier operación / función en diferentes estructuras de datos se define para acciones particulares. Aquí en su caso, es decir, eliminar un elemento, eliminar, Pop y eliminar. (Si considera conjuntos, agregue otra operación - descartar) Otro caso confuso es al agregar. Insertar / Anexar. Para la demostración, implementemos deque. deque es una estructura de datos lineal híbrida, donde puede agregar elementos / eliminar elementos de ambos extremos (extremos trasero y frontal)
Mientras pop y delete ambos toman índices para eliminar un elemento como se indica en los comentarios anteriores. Una diferencia clave es la complejidad del tiempo para ellos. La complejidad de tiempo para pop () sin índice es O (1) pero no es el mismo caso para la eliminación del último elemento.
Esto está mal en múltiples formas. No hay tal método comodelete . Las diferencias son quepop devuelve el valor y que delfunciona en sectores. En los casos en que popfunciona, deltiene exactamente la misma complejidad computacional (y es un poco más rápido por un término constante).
abarnert
1
La operación de eliminación en una lista tiene un valor para eliminar. Busca en la lista para encontrar un elemento con ese valor y elimina el primer elemento coincidente que encuentra. Es un error si no hay ningún elemento coincidente, genera un 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
La declaración del se puede utilizar para eliminar una lista completa. Si tiene un elemento de lista específico como argumento para del (por ejemplo, nombre de lista [7] para hacer referencia específica al octavo elemento de la lista), simplemente eliminará ese elemento. Incluso es posible eliminar un "segmento" de una lista. Es un error si hay un índice fuera de rango, genera un 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
El uso habitual de pop es eliminar el último elemento de una lista a medida que usa la lista como una pila. A diferencia de del, pop devuelve el valor que salió de la lista. Opcionalmente, puede dar un valor de índice a pop y pop que no sea el final de la lista (por ejemplo, listname.pop (0) eliminará el primer elemento de la lista y devolverá ese primer elemento como resultado). Puede usar esto para hacer que la lista se comporte como una cola, pero hay rutinas de biblioteca disponibles que pueden proporcionar operaciones de cola con un mejor rendimiento que pop (0). Es un error si hay un índice fuera de rango, genera un 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
Eliminar básicamente funciona en el valor. Eliminar y hacer estallar el trabajo en el índice
Eliminar básicamente elimina el primer valor coincidente. Eliminar elimina el elemento de un índice específico Pop básicamente toma un índice y devuelve el valor en ese índice. La próxima vez que imprima la lista, el valor no aparece.
Aunque le agradecemos su respuesta, sería mejor si proporcionara un valor adicional además de las otras respuestas. En este caso, su respuesta no proporciona un valor adicional, ya que otros usuarios cubrieron todo lo que ha incluido en su respuesta. Como un problema secundario, no incluya texto como imágenes cuando pueda pegarlo como texto. Si una respuesta anterior fue útil para usted, debe votarla .
David Buck el
-3
También puede usar remove para eliminar un valor por índice.
@abarnert su caso de uso funciona en sincronía con el siguiente caso n = [5,3,5], luego n.remove (5). Ambos eliminan el primer elemento encontrado de la lista.
Akhil Ghatiki
@AkhilGhatiki n.remove(n[2])elimina n[0], no n[2]. Por lo tanto, no es solo tiempo lineal sin ninguna razón (tal vez no sea un gran problema cuando N = 3), también está mal (un gran problema, no importa lo que sea N)
Respuestas:
Sí,
remove
elimina el primer valor coincidente , no un índice específico:del
elimina el elemento en un índice específico:y
pop
elimina el elemento en un índice específico y lo devuelve.Sus modos de error también son diferentes:
fuente
del
no es un remanente de sintaxis, no. La sintaxis no cambia, al igual quereturn
orif
owhile
.del
ejemplo es algo engañoso. ¿Qué elemento se elimina exactamente? ¿El segundo o el tercero? Deberías haber usado[9, 8, 7, 6]
,del a[1]
y[9, 7, 6]
Use
del
para eliminar un elemento por índice,pop()
para eliminarlo por índice si necesita el valor devuelto, yremove()
para eliminar un elemento por valor. Esto último requiere buscar en la lista, y aumentaValueError
si no se produce dicho valor en la lista.Al eliminar el índice
i
de una lista den
elementos, las complejidades computacionales de estos métodos sonfuente
del
es un poco más rápido, pero por una razón diferente: la búsqueda de__delitem__
un tipo implementado en C ocurre por índice en lugar de por nombre, mientraspop
que debe buscarse siguiendo el protocolo descriptor completo. La ejecución de las funciones mismas debería llevar la misma cantidad de tiempo. Ambos devuelven un puntero, uno al objeto eliminado y el otro aNone
.Como nadie más lo ha mencionado, tenga en cuenta que
del
(a diferencia depop
) permite la eliminación de un rango de índices debido al corte de la lista:Esto también permite evitar un
IndexError
si el índice no está en la lista:fuente
Ya respondido bastante bien por otros. Este de mi final :)
Evidentemente,
pop
es el único que devuelve el valor, yremove
es el único que busca el objeto, mientras que sedel
limita a una simple eliminación.fuente
pop: toma el índice y devuelve el valor
remove: toma valor, elimina la primera aparición y no devuelve nada
eliminar: toma el índice, elimina el valor en ese índice y no devuelve nada
fuente
Muchas de las mejores explicaciones están aquí, pero haré todo lo posible para simplificar más.
Entre todos estos métodos, reverse & pop son postfix mientras que delete es prefix .
remove (): solía eliminar la primera aparición del elemento
remove(i)
=> primera aparición del valor ipop (): solía eliminar el elemento si:
sin especificar
pop()
=> desde el final de la listaespecificado
pop(index)
=> de índiceADVERTENCIA: Método peligroso por delante
delete () : es un método de prefijo.
Observe dos sintaxis diferentes para el mismo método: [] y (). Posee poder para:
1.Borrar índice
del a[index]
=> se utiliza para eliminar el índice y su valor asociado al igual que pop.2. Eliminar valores en el rango [índice 1: índice N]
del a[0:3]
=> valores múltiples en rango3.Última pero no lista, para borrar toda la lista de una vez
del (a)
=> como se dijo anteriormente.Espero que esto aclare la confusión si hay alguna.
fuente
Cualquier operación / función en diferentes estructuras de datos se define para acciones particulares. Aquí en su caso, es decir, eliminar un elemento, eliminar, Pop y eliminar. (Si considera conjuntos, agregue otra operación - descartar) Otro caso confuso es al agregar. Insertar / Anexar. Para la demostración, implementemos deque. deque es una estructura de datos lineal híbrida, donde puede agregar elementos / eliminar elementos de ambos extremos (extremos trasero y frontal)
Aquí, vea las operaciones:
Las operaciones tienen que devolver algo. Entonces, pop: con y sin índice. Si no quiero devolver el valor: del self.items [0]
Eliminar por valor no Índice:
eliminar :
Devoluciones [1,3,5,7]
Consideremos el caso de los conjuntos.
fuente
Mientras pop y delete ambos toman índices para eliminar un elemento como se indica en los comentarios anteriores. Una diferencia clave es la complejidad del tiempo para ellos. La complejidad de tiempo para pop () sin índice es O (1) pero no es el mismo caso para la eliminación del último elemento.
Si su caso de uso es siempre eliminar el último elemento, siempre es preferible usar pop () sobre delete (). Para obtener más explicaciones sobre las complejidades del tiempo, puede consultar https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
fuente
delete
. Las diferencias son quepop
devuelve el valor y quedel
funciona en sectores. En los casos en quepop
funciona,del
tiene exactamente la misma complejidad computacional (y es un poco más rápido por un término constante).La operación de eliminación en una lista tiene un valor para eliminar. Busca en la lista para encontrar un elemento con ese valor y elimina el primer elemento coincidente que encuentra. Es un error si no hay ningún elemento coincidente, genera un ValueError .
La declaración del se puede utilizar para eliminar una lista completa. Si tiene un elemento de lista específico como argumento para del (por ejemplo, nombre de lista [7] para hacer referencia específica al octavo elemento de la lista), simplemente eliminará ese elemento. Incluso es posible eliminar un "segmento" de una lista. Es un error si hay un índice fuera de rango, genera un IndexError .
El uso habitual de pop es eliminar el último elemento de una lista a medida que usa la lista como una pila. A diferencia de del, pop devuelve el valor que salió de la lista. Opcionalmente, puede dar un valor de índice a pop y pop que no sea el final de la lista (por ejemplo, listname.pop (0) eliminará el primer elemento de la lista y devolverá ese primer elemento como resultado). Puede usar esto para hacer que la lista se comporte como una cola, pero hay rutinas de biblioteca disponibles que pueden proporcionar operaciones de cola con un mejor rendimiento que pop (0). Es un error si hay un índice fuera de rango, genera un IndexError .
Ver collections.deque para más detalles.
fuente
Eliminar básicamente funciona en el valor. Eliminar y hacer estallar el trabajo en el índice
Eliminar básicamente elimina el primer valor coincidente. Eliminar elimina el elemento de un índice específico Pop básicamente toma un índice y devuelve el valor en ese índice. La próxima vez que imprima la lista, el valor no aparece.
fuente
También puede usar remove para eliminar un valor por índice.
n se referiría a [1, 5]
fuente
n = [5, 3, 5]
entoncesn.remove(n[2])
.n.remove(n[2])
eliminan[0]
, non[2]
. Por lo tanto, no es solo tiempo lineal sin ninguna razón (tal vez no sea un gran problema cuando N = 3), también está mal (un gran problema, no importa lo que sea N)