todos - python eliminar objeto
¿Hay una forma sencilla de eliminar un elemento de la lista por valor? (19)
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
Así que 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 sencilla de hacer esto?
Aquí se explica cómo hacerlo in situ (sin comprensión de lista):
def remove_all(seq, value):
pos = 0
for item in seq:
if item != value:
seq[pos] = item
pos += 1
del seq[pos:]
Como lo indican otras muchas respuestas, list.remove()
funcionará, pero arroje un ValueError
si el elemento no estaba en la lista. Con Python 3.4+, hay un enfoque interesante para manejar esto, usando el administrador de contexto de supresión :
from contextlib import suppress
with suppress(ValueError):
a.remove(''b'')
Con un bucle for y una condición:
def cleaner(seq, value):
temp = []
for number in seq:
if number != value:
temp.append(number)
return temp
Y si quieres eliminar algunos, pero no todos:
def cleaner(seq, value, occ):
temp = []
for number in seq:
if number == value and occ:
occ -= 1
continue
else:
temp.append(number)
return temp
Considerar:
a = [1,2,2,3,4,5]
Para eliminar todas las ocurrencias, puede usar la función de filtro en python. Por ejemplo, se vería como:
a = list(filter(lambda x: x!= 2, a))
Por lo tanto, mantendría todos los elementos de un! = 2.
Solo para sacar uno de los artículos usa.
a.remove(2)
Digamos, por ejemplo, queremos eliminar todos los 1 de x. Así es como lo haría:
x = [1, 2, 3, 1, 2, 3]
Ahora, este es un uso práctico de mi método:
def Function(List, Unwanted):
[List.remove(Unwanted) for Item in range(List.count(Unwanted))]
return List
x = Function(x, 1)
print(x)
Y este es mi método en una sola línea:
[x.remove(1) for Item in range(x.count(1))]
print(x)
Ambos producen esto como una salida:
[2, 3, 2, 3, 2, 3]
Espero que esto ayude. 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.
Encontrar un valor en una lista y luego eliminar ese índice (si existe) es más fácil usando el método de eliminación de la lista:
>>> a = [1, 2, 3, 4]
>>> try:
... a.remove(6)
... except ValueError:
... pass
...
>>> print a
[1, 2, 3, 4]
>>> try:
... a.remove(3)
... except ValueError:
... pass
...
>>> print a
[1, 2, 4]
Si haces esto a menudo, puedes envolverlo en una función:
def remove_if_exists(L, value):
try:
L.remove(value)
except ValueError:
pass
Este ejemplo es rápido y eliminará todas las instancias de un valor de la lista:
a = [1,2,3,1,2,3,4]
while True:
try:
a.remove(3)
except:
break
print a
>>> [1, 2, 1, 2, 4]
Esto elimina todas las instancias de "-v"
de la matriz sys.argv
, y no se queja si no se encontraron instancias:
while "-v" in sys.argv:
sys.argv.remove(''-v'')
Puede ver el código en acción, en un archivo llamado speechToText.py
:
$ python speechToText.py -v
[''speechToText.py'']
$ python speechToText.py -x
[''speechToText.py'', ''-x'']
$ python speechToText.py -v -v
[''speechToText.py'']
$ python speechToText.py -v -v -x
[''speechToText.py'', ''-x'']
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 tiene duplicados, entonces
my_set=set([3,4,2])
my_set.discard(1)
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 apariciones de un elemento de una lista. Si no desea dupes en primer lugar, una vez más, un conjunto es útil.
my_set.add(3)
no cambia my_set desde arriba
Para eliminar la primera aparición de un elemento en una lista, simplemente use list.remove
:
>>> a = [''a'', ''b'', ''c'', ''d'']
>>> a.remove(''b'')
>>> print a
[''a'', ''c'', ''d'']
Tenga en cuenta que no elimina todas las apariciones de su elemento. Use una lista de comprensión para eso.
>>> a = [10, 20, 30, 40, 20, 30, 40, 20, 70, 20]
>>> a = [x for x in a if x != 20]
>>> print a
[10, 30, 40, 30, 40, 70]
Por lo general, Python lanzará una excepción si le dices que haga algo que no puede, así que tendrás que hacer lo siguiente:
if c in a:
a.remove(c)
o:
try:
a.remove(c)
except ValueError:
pass
Una excepción no es necesariamente algo malo siempre y cuando sea una que esté esperando y maneje adecuadamente.
Sí. Esto es lo que encontré más útil:
import sys
a = [1, 2, 3, 4]
y = 0
if y < 1:
a.remove(1)
print len(a)
else:
sys.exit()
Ahora .remove()
solo toma un argumento, así que solo puedes eliminar un entero de tu lista.
Si sabe qué valor eliminar, aquí tiene una forma simple (tan simple como se me ocurre, de todos modos):
a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4]
while a.count(1) > 0:
a.remove(1)
Obtendrás [0, 0, 2, 3, 4]
Si sus elementos son distintos, entonces una simple diferencia de conjuntos servirá.
c = [1,2,3,4,''x'',8,6,7,''x'',9,''x'']
z = list(set(c) - set([''x'']))
print z
[1, 2, 3, 4, 6, 7, 8, 9]
Sobrescriba la lista indexando todo excepto los elementos que desea eliminar
>>> s = [5,4,3,2,1]
>>> s[0:2] + s[3:]
[5, 4, 2, 1]
También podemos usar .pop:
>>> lst = [23,34,54,45]
>>> remove_element = 23
>>> if remove_element in lst:
... lst.pop(lst.index(remove_element))
...
23
>>> lst
[34, 54, 45]
>>>
Tu puedes hacer
a=[1,2,3,4]
if 6 in a:
a.remove(6)
pero arriba hay que buscar 6 en la lista 2 veces, así que intente excepto sería más rápido
try:
a.remove(6)
except:
pass
list1=[1,2,3,3,4,5,6,1,3,4,5]
n=int(input(''enter number''))
while n in list1:
list1.remove(n)
print(list1)
arr = [1, 1, 3, 4, 5, 2, 4, 3]
# to remove first occurence of that element, suppose 3 in this example
arr.remove(3)
# to remove all occurences of that element, again suppose 3
# use something called list comprehension
new_arr = [element for element in arr if element!=3]
# if you want to delete a position use "pop" function, suppose
# position 4
# the pop function also returns a value
removed_element = arr.pop(4)
# u can also use "del" to delete a position
del arr[4]