Есть ли простой способ удалить элемент списка по значению?
Я хочу удалить значение из списка, если оно существует в списке (чего может и не быть).
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: passprint(a)
Но нет ли более простого способа сделать это?
Переведено автоматически
Ответ 1
Чтобы удалить первое вхождение элемента, используйте list.remove:
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 != 2
Чтобы просто удалить один из элементов, используйте
a.remove(2)