Вопрос-Ответ

Is there a simple way to delete a list element by value?

Есть ли простой способ удалить элемент списка по значению?

Я хочу удалить значение из списка, если оно существует в списке (чего может и не быть).

a = [1, 2, 3, 4]
b = a.index(6)

del a[b]
print(a)

Приведенное выше выдает ошибку:

ValueError: list.index(x): x not in list

Итак, я должен сделать это:

a = [1, 2, 3, 4]

try:
b = a.index(6)
del a[b]
except:
pass

print(a)

Но нет ли более простого способа сделать это?

Переведено автоматически
Ответ 1

Чтобы удалить первое вхождение элемента, используйте list.remove:

>>> xs = ['a', 'b', 'c', 'd']
>>> xs.remove('b')
>>> print(xs)
['a', 'c', 'd']

Чтобы удалить все вхождения элемента, используйте понимание списка:

>>> xs = ['a', 'b', 'c', 'd', 'b', 'b', 'b', 'b']
>>> xs = [x for x in xs if x != 'b']
>>> print(xs)
['a', 'c', 'd']
Ответ 2

Обычно Python выдает исключение, если вы прикажете ему сделать что-то, чего он не может, поэтому вам придется сделать либо:

if c in a:
a.remove(c)

или:

try:
a.remove(c)
except ValueError:
pass

Исключение не обязательно является чем-то плохим, если вы его ожидаете и обрабатываете должным образом.

Ответ 3

Вы можете сделать

a=[1,2,3,4]
if 6 in a:
a.remove(6)

но выше нужно выполнить поиск 6 в списке a 2 раза, поэтому попробуйте except, будет быстрее

try:
a.remove(6)
except:
pass
Ответ 4

Рассмотрим:

a = [1,2,2,3,4,5]

Чтобы удалить все вхождения, вы могли бы использовать функцию filter в python.
Например, это будет выглядеть так:

a = list(filter(lambda x: x!= 2, a))

Таким образом, он сохранит все элементы a != 2.

Чтобы просто удалить один из элементов, используйте

a.remove(2)
python list