有没有一种简单的方法可以按值删除列表元素?

2022-09-05 01:05:24

我想从列表中删除一个值,如果它存在于列表中(它可能不存在)。

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

异常不一定是坏事,只要它是你期望并正确处理的异常。