En Python, sé cómo eliminar elementos de una lista.
item_list = ['item', 5, 'foo', 3.14, True]
item_list.remove('item')
item_list.remove(5)
Este código anterior elimina los valores 5 y 'item' de item_list. Pero cuando hay muchas cosas que eliminar, tengo que escribir muchas líneas de
item_list.remove("something_to_remove")
Si conozco el índice de lo que estoy eliminando, uso:
del item_list[x]
donde x es el índice del elemento que quiero eliminar.
Si conozco el índice de todos los números que quiero eliminar, usaré algún tipo de bucle para del
los elementos de los índices.
Pero, ¿qué pasa si no conozco los índices de los elementos que quiero eliminar?
Lo intenté item_list.remove('item', 'foo')
, pero recibí un error que decía que remove
solo se necesita un argumento.
¿Existe alguna forma de eliminar varios elementos de una lista en una sola declaración?
PD: he usado del
y remove
. ¿Alguien puede explicar la diferencia entre estos dos o son iguales?
Gracias
del
elimina un elemento por su índice. Laremove
función de una lista encuentra el índice de un elemento y luego llamadel
a ese índice.Respuestas:
En Python, crear un nuevo objeto suele ser mejor que modificar uno existente:
Que es equivalente a:
En caso de una gran lista de valores filtrados (aquí,
('item', 5)
hay un pequeño conjunto de elementos), use unset
puede conducir a una mejora del rendimiento, ya que lain
operación está en O (1):Tenga en cuenta que, como se explica en los comentarios y se sugiere aquí , lo siguiente podría ahorrar aún más tiempo, evitando que el conjunto se construya en cada bucle:
Un filtro de floración también es una buena solución si la memoria no es barata.
fuente
in
funcionamiento. Consulte estos puntos de referencia para obtener comparaciones de las cuatro estructuras de datos primitivas. Sí, el conjunto se construye en cada bucle, como se sugiere aquí , por lo tanto, guardar el conjunto en una variable dedicada para usar en la expresión del generador puede ahorrar tiempo.id(item_list)
antes y despuésitem_list = [e for e in item_list if e not in ('item', 5)]
. Verifique mi respuesta para ver cómo modificar una lista en su lugar.La lista final después de la eliminación debe ser la siguiente
Código de línea única
la salida sería la siguiente
fuente
No sé por qué todos olvidaron mencionar la asombrosa capacidad de
set
s en Python. Simplemente puede convertir su lista en un conjunto y luego eliminar lo que desee eliminar en una expresión simple como esta:fuente
Estoy volviendo a publicar mi respuesta desde aquí porque vi que también encaja aquí. Permite eliminar múltiples valores o eliminar solo duplicados de estos valores y devuelve una nueva lista o modifica la lista dada en su lugar.
Extensión Docstring:
Debe tener claro lo que realmente quiere hacer, modificar una lista existente o hacer una nueva lista con los elementos específicos que faltan. Es importante hacer esa distinción en caso de que tenga una segunda referencia que apunte a la lista existente. Si tienes, por ejemplo ...
Este puede ser o no el comportamiento que desea.
fuente
Puede utilizar filterfalse función de itertools módulo
Ejemplo
Salida:
fuente
No entiendo exactamente por qué no le gusta .remove, pero para obtener el primer índice correspondiente a un valor, use .index (value):
luego elimine el valor correspondiente:
.index (valor) obtiene la primera aparición de valor y .remove (valor) elimina la primera aparición de valor
fuente
del item_list[ind]
lugar depop
si no necesita el valor de resultado.Puedes usar esto -
Supongamos que tenemos una lista
l = [1,2,3,4,5]
Queremos eliminar los dos últimos elementos en una sola declaración.
Tenemos salida:
Mantenlo simple
fuente