¿Cómo elimino un elemento de una lista por índice en Python?
Encontré el list.remove
método, pero digo que quiero eliminar el último elemento, ¿cómo hago esto? Parece que la eliminación predeterminada busca en la lista, pero no quiero que se realice ninguna búsqueda.
O(n)
en operación a tiempo.deque()
proporciona operaciones eficientes en ambos extremos, pero no proporciona O (1) inserciones / búsquedas / eliminaciones en el medio.O(n)
acceso al índicea[i]
(debido a las listas vinculadas). Nota: la implementación basada en matriz proporcionaO(1)
acceso al índice.Respuestas:
Use
del
y especifique el índice del elemento que desea eliminar:También admite rodajas:
Aquí está la sección del tutorial.
fuente
PyList_GetItem()
esencialmente regresa((PyListObject *)op) -> ob_item[i];
: eli
elemento th de una matriz.Probablemente quieras
pop
:Por defecto,
pop
sin ningún argumento elimina el último elemento:fuente
pop()
por sí mismo, es muy obvio, mientras quepop(-1)
es potencialmente confuso precisamente porque es redundante.pop
en la mayoría de los lenguajes de programación generalmente elimina el último elemento, como lo hace en Python. Entonces, si especifica -1 o nada es igual.pop()
devuelve cualquier elemento que eliminó.Como otros mencionados, pop y del son las formas eficientes de eliminar un elemento de índice dado. Sin embargo, solo por completar (ya que lo mismo se puede hacer de muchas maneras en Python):
Uso de sectores (esto no elimina en su lugar el elemento de la lista original):
(Además, este será el método menos eficiente cuando se trabaja con la lista de Python, pero esto podría ser útil (pero no eficiente, reitero) cuando se trabaja con objetos definidos por el usuario que no admiten pop, pero definen a
__getitem__
):Nota: Tenga en cuenta que este método no modifica la lista en su lugar como
pop
ydel
. En su lugar, hace dos copias de las listas (una desde el principio hasta el índice pero sin ella (a[:index]
) y otra después del índice hasta el último elemento (a[index+1:]
)) y crea un nuevo objeto de lista agregando ambos. Esto luego se reasigna a la variable de lista (a
). Por lo tanto, el objeto de lista anterior se desreferencia y, por lo tanto, se recolecta basura (siempre que el objeto de lista original no sea referenciado por ninguna variable que no sea a).Esto hace que este método sea muy ineficiente y también puede producir efectos secundarios indeseables (especialmente cuando otras variables apuntan al objeto de lista original que permanece sin modificar).
Gracias a @MarkDickinson por señalar esto ...
Esta respuesta de desbordamiento de pila explica el concepto de corte.
También tenga en cuenta que esto solo funciona con índices positivos.
Mientras se usa con objetos, el
__getitem__
método debe haberse definido y, lo que es más importante__add__
, debe haberse definido para devolver un objeto que contenga elementos de ambos operandos.En esencia, esto funciona con cualquier objeto cuya definición de clase sea como:
Esto funciona con lo
list
que define__getitem__
y__add__
métodos.Comparación de las tres formas en términos de eficiencia:
Suponga que lo siguiente está predefinido:
El
del object[index]
método:Con mucho, el método más eficiente. Funciona con todos los objetos que definen un
__del__
método.El desmontaje es el siguiente:
Código:
Desmontaje
pop
método:Es menos eficiente que el método del y se usa cuando necesita obtener el elemento eliminado.
Código:
Desmontaje
El método de cortar y agregar.
El menos eficiente.
Código:
Desmontaje
Nota: En los tres desmontazos, ignore las dos últimas líneas que básicamente son
return None
. También las dos primeras líneas están cargando los valores globalesa
yindex
.fuente
a = a[:index] + a[index+1 :]
truco fue el más seguro, cuando se trata de grandes listas. Todos los otros métodos terminaron en un punto muerto. Así que muchas graciaspop
También es útil para eliminar y mantener un elemento de una lista. Dondedel
realmente destroza el artículo.fuente
Si desea eliminar el elemento de posición específico en una lista, como el 2º, 3º y 7º. no puedes usar
Dado que después de eliminar el segundo elemento, el tercer elemento que elimina en realidad es el cuarto elemento de la lista original. Puede filtrar los elementos 2, 3 y 7 en la lista original y obtener una nueva lista, como a continuación:
fuente
Esto depende de lo que quieras hacer.
Si desea devolver el elemento que eliminó, use
pop()
:Sin embargo, si solo desea eliminar un elemento, use
del
:Además, le
del
permite usar sectores (por ejemplodel[2:]
).fuente
En general, estoy usando el siguiente método:
fuente
Otra forma más de eliminar un elemento (s) de una lista por índice.
a [x: y] apunta a los elementos del índice
x
ay-1
. Cuando declaramos esa parte de la lista como una lista vacía ([]
), esos elementos se eliminan.fuente
Simplemente puede buscar el elemento que desea eliminar. Es realmente simple Ejemplo:
Salida: acde
fuente
Use el siguiente código para eliminar el elemento de la lista:
Si desea eliminar los datos del elemento índice de la lista, use:
fuente
Como se mencionó anteriormente, la mejor práctica es del (); o pop () si necesita saber el valor.
Una solución alternativa es volver a apilar solo los elementos que desee:
eta: hmm ... no funcionará en valores de índice negativos, reflexionará y actualizará
supongo
lo arreglaría ... pero de repente esta idea parece muy frágil. Interesante experimento mental sin embargo. Parece que debería haber una forma 'adecuada' de hacer esto con la comprensión de append () / list.
meditando
fuente
del()
? Para esa función, ¿proporciona la lista como el primer argumento para esa función y luego el índice, o el índice primero y luego la lista? ¿Devuelve el argumento de la lista sin el elemento o elimina en su lugar? Sé sobre ladel
declaración, pero no sobre una función con el mismo nombre.No parece que estés trabajando con una lista de listas, así que lo mantendré breve. Desea usar pop ya que eliminará elementos, no elementos que son listas, debe usar del para eso. Para llamar al último elemento en python es "-1"
fuente
pop()
ydel
ambos eliminan un elemento en el índice proporcionado, independientemente de si ese elemento es en sí mismo una lista o no.a = [1, [2, 3], 4]; del a[1]; b = [1, [2, 3], 4]; b.pop(1); assert a == b
l - lista de valores; Tenemos que eliminar los índices de la lista inds2rem .
fuente
<map at 0x7f4d54109a58>
. y l es rango (0,20)Use la función "del" :
Por ejemplo, si desea eliminar los últimos 3 elementos, su código debe ser:
Por ejemplo, si desea eliminar los últimos 8 elementos, su código debe ser:
fuente
del
Es una declaración . Si fuera una función, tendrías que escribirdel(listame[-N])
Ya se ha mencionado cómo eliminar un solo elemento de una lista y qué ventajas tienen los diferentes métodos. Tenga en cuenta, sin embargo, que eliminar varios elementos tiene algún potencial de errores:
Los elementos 3 y 8 (no 3 y 7) de la lista original se han eliminado (ya que la lista se acortó durante el ciclo), lo que podría no haber sido la intención. Si desea eliminar de forma segura múltiples índices, primero debe eliminar los elementos con el índice más alto, por ejemplo, así:
fuente
O si se deben eliminar varios índices:
Por supuesto, entonces también podría hacer:
fuente
Puede usar del o pop para eliminar elementos de la lista en función del índice. Pop imprimirá el miembro que está eliminando de la lista, mientras que la lista eliminará ese miembro sin imprimirlo.
fuente
Se puede usar del o pop, pero prefiero del, ya que puede especificar índices y sectores, lo que le da al usuario más control sobre los datos.
Por ejemplo, comenzando con la lista que se muestra, se puede eliminar su último elemento
del
como un segmento, y luego se puede eliminar el último elemento del resultado usandopop
.fuente