a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
Lo anterior muestra el siguiente error:
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 6, in <module>
b = a.index(6)
ValueError: list.index(x): x not in list
Entonces tengo que hacer esto:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
¿Pero no hay una manera más simple de hacer esto?
except
es una mala práctica . Usarexcept Exception
como mínimo.Respuestas:
Para eliminar la primera aparición de un elemento en una lista, simplemente use
list.remove
:Tenga en cuenta que no elimina todas las ocurrencias de su elemento. Use una lista de comprensión para eso.
fuente
remove
es O (n)?Por lo general, Python lanzará una excepción si le dice que haga algo que no puede, por lo que deberá hacer lo siguiente:
o:
Una excepción no es necesariamente algo malo siempre y cuando sea una que esté esperando y maneje adecuadamente.
fuente
a.remove(c)
podría fallar a pesar de laif c in a
verificación (a
podría modificarse en otro subproceso después de lac in a
verificación pero antes de laa.remove(c)
llamada).try/except
o se podrían usar cerraduras para evitar la condición de carrera.Tu puedes hacer
pero arriba necesita buscar 6 en la lista 2 veces, así que intente, excepto sería más rápido
fuente
Considerar:
Para eliminar todas las ocurrencias, puede usar la función de filtro en python. Por ejemplo, se vería así:
Por lo tanto, mantendría todos los elementos de
a != 2
.Para sacar uno de los elementos, use
fuente
filter()
en otrolist()
? Según el manual, ya devuelve una lista.Aquí se explica cómo hacerlo en el lugar (sin comprensión de la lista):
fuente
O(n*n)
innecesaria (compárese 1e6 y 1e12; no quiere arriesgarse a esto último).while 1: L.remove(value)
y volver aValueError
funcionar podría funcionar bien con unas pocasvalue
listas pequeñas en CPython.Si sabe qué valor eliminar, aquí hay una manera simple (tan simple como se me ocurre, de todos modos):
Usted obtendrá
[0, 0, 2, 3, 4]
fuente
while 1 in a:
como estructura de bucle?O(n^2)
donde estaría una comprensiónO(n)
.Otra posibilidad es usar un conjunto en lugar de una lista, si un conjunto es aplicable en su aplicación.
IE si sus datos no están ordenados y no tienen duplicados, entonces
Está libre de errores.
A menudo, una lista es solo un contenedor útil para artículos que en realidad no están ordenados. Hay preguntas sobre cómo eliminar todas las ocurrencias de un elemento de una lista. Si no quieres engañar en primer lugar, una vez más, un conjunto es útil.
no cambia my_set desde arriba.
fuente
Como se indica en muchas otras respuestas,
list.remove()
funcionará, pero arroje unValueError
si el elemento no estaba en la lista. Con Python 3.4+, hay un enfoque interesante para manejar esto, usando el Suppress contextmanager :fuente
Encontrar un valor en una lista y luego eliminar ese índice (si existe) es más fácil usando el método remove de la lista:
Si hace esto a menudo, puede resumirlo en una función:
fuente
Este ejemplo es rápido y eliminará todas las instancias de un valor de la lista:
fuente
break
adelanteexcept ValueError
.En una linea:
a veces es útil.
Aún más fácil:
fuente
Si sus elementos son distintos, entonces bastará una simple diferencia de conjunto.
fuente
También podemos usar .pop:
fuente
Sobrescriba la lista indexando todo excepto los elementos que desea eliminar
fuente
Con un bucle for y una condición:
Y si desea eliminar algunos, pero no todos:
fuente
fuente
Digamos, por ejemplo, que queremos eliminar todos los 1 de x. Así es como lo haría:
Ahora, este es un uso práctico de mi método:
Y este es mi método en una sola línea:
Ambos producen esto como una salida:
Espero que esto ayude. PD, tenga en cuenta que esto se escribió en la versión 3.6.2, por lo que es posible que deba ajustarlo para versiones anteriores.
fuente
Tal vez sus soluciones funcionen con ints, pero no me funcionan con dictionarys.
Por un lado, remove () no me ha funcionado. Pero tal vez funciona con tipos básicos. Supongo que el siguiente código también es la forma de eliminar elementos de la lista de objetos.
Por otro lado, 'del' tampoco ha funcionado correctamente. En mi caso, usando python 3.6: cuando trato de eliminar un elemento de una lista en un bucle 'for' con el comando 'del', python cambia el índice en el proceso y bucle se detiene prematuramente antes de tiempo. Solo funciona si elimina elemento por elemento en orden inverso . De esta manera, no cambia el índice de matriz de elementos pendientes cuando lo está revisando
Entonces, estoy acostumbrado:
donde 'lista' es como [{'clave1': valor1 '}, {' clave2 ': valor2}, {' clave3 ': valor3}, ...]
También puedes hacer más pitónico usando enumerate:
fuente
fuente
Esto elimina todas las instancias de
"-v"
la matrizsys.argv
y no se queja si no se encontraron instancias:Puede ver el código en acción, en un archivo llamado
speechToText.py
:fuente
esta es mi respuesta, solo use while y for
fuente