有没有简单的方法通过值删除列表元素?

1201 投票
27 回答
1996110 浏览
提问于 2025-04-15 22:29

我想从一个列表中删除一个值,如果这个值在列表中存在的话(不过它可能并不在)。

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)

但难道没有更简单的方法来做到这一点吗?

27 个回答

90

你可以这样做:

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

但是这样做需要在列表a中查找6两次,所以使用try except会更快一些。

try:
    a.remove(6)
except:
    pass
212

通常情况下,如果你让Python去做一些它做不了的事情,它会抛出一个异常(Exception)。这时候你需要做以下两件事之一:

if c in a:
    a.remove(c)

或者:

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

异常并不一定是坏事,只要是你能预料到的,并且能够妥善处理它。

1889

要删除一个元素的第一次出现,可以使用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']

撰写回答