usuario3457749
Suponga que tiene una lista
>>> m = ['a','b','c']
me gustaria hacer una nueva lista n
que tiene todo excepto un elemento dado en m
(por ejemplo, el elemento 'a'
). Sin embargo, cuando uso
>>> m.remove('a')
>>> m
m = ['b', 'c']
la lista original está mutada (el valor 'a'
se elimina de la lista original). ¿Hay alguna manera de obtener una nueva lista sans-'a'
sin mutar el original? entonces quiero decir que m
todavía debería ser [ 'a', 'b', 'c' ]
y obtendré un nuevo lista, que tiene que ser [ 'b', 'c' ]
.
Krumelur
Supongo que quiere decir que desea crear una nueva lista sin un elemento dado, en lugar de cambiar la lista original. Una forma es usar una lista de comprensión:
m = ['a', 'b', 'c']
n = [x for x in m if x != 'a']
n
ahora es una copia de m
pero sin el 'a'
elemento.
Otra forma sería, por supuesto, copiar la lista primero
m = ['a', 'b', 'c']
n = m[:]
n.remove('a')
Si elimina un valor por índice, es aún más simple
n = m[:index] + m[index+1:]
-
En este caso específico, creo que vale la pena mencionarlo si desea una copia de la lista, excepto el elemento 0 con el que puede dividirlo.
m[1:]
.– kyliecatt
28 de julio de 2014 a las 21:14
-
Es cierto, pero leí la pregunta ya que se desea eliminar un elemento por valor, no por índice. Aún así, ¡un buen punto!
– Krumelur
28 de julio de 2014 a las 21:16
-
Solo es útil si sabe con certeza que es el primer elemento de la lista que no desea, pero creo que será útil para futuros lectores para ilustrar cómo funciona el corte de listas.
– kyliecatt
28 de julio de 2014 a las 21:17
-
Me gustaría agregar que el primer y segundo enfoque tienen un comportamiento diferente si el valor no es único en la lista. El primero eliminaría todas las ocurrencias del valor, mientras que el segundo solo eliminaría la primera ocurrencia.
– usuario12205
31 de agosto de 2018 a las 15:17
请叫我小马哥
Hay una forma sencilla de hacerlo utilizando la función integrada :filter .
Aquí hay un ejemplo de hacha:
a = [1, 2, 3, 4]
b = filter(lambda x: x != 3, a)
-
Esto es dorado. Ten mi voto a favor. No puedo creer que estaba corriendo
list.pop()
en un bucle para lograr esto. Mis índices se desordenaron tanto.– Bufón
28 de diciembre de 2022 a las 13:36
Oleg O.
Si el orden no es importante, puede usar set (además, la eliminación parece ser rápida en conjuntos):
list(set(m) - set(['a']))
Sin embargo, esto eliminará los elementos duplicados de su lista original
EHadavi
Podemos hacerlo a través de la función de copia () incorporada para la lista; Sin embargo, debe asignar un nuevo nombre para la copia;
m = ['a','b','c']
m_copy=m.copy()
m_copy.remove('a')
print (m)
[‘a’, ‘b’, ‘c’]
print(m_copy)
[‘b’, ‘c’]
Andrés Johnson
Puede crear una nueva lista sin el elemento ofensivo con una lista de comprensión. Esto preservará el valor de la lista original.
l = ['a', 'b', 'c']
[s for s in l if s != 'a']
jugo de sig
Otro enfoque para la comprensión de listas es numpy:
>>> import numpy
>>> a = [1, 2, 3, 4]
>>> list(numpy.remove(a, a.index(3)))
[1, 2, 4]
Suraj Rao
Podemos hacerlo sin usar la función de eliminación incorporada y también sin crear una nueva variable de lista
Código:
# List m
m = ['a', 'b', 'c']
# Updated list m, without creating new list variable
m = [x for x in m if x != a]
print(m)
producción
>>> ['b', 'c']
¿Cuál quieres que sea el resultado final? Puede copiar m en una nueva lista con m[:]
– ben
28 de julio de 2014 a las 21:06
¿Quiere decir… eliminar algo de una lista sin cambiar la lista? ¿O quiere decir como reemplazar un elemento en una lista con algún tipo de representación nula para que los índices no cambien?
– Dan Oberlam
28 de julio de 2014 a las 21:06
sí, me refiero a eliminar algo sin cambiar la lista
– usuario3457749
28 de julio de 2014 a las 21:11
Quiere decir
my_var = m[0]
?– Padraic Cunningham
28 de julio de 2014 a las 21:24