有没有简单的方法通过值删除列表元素?
我想从一个列表中删除一个值,如果这个值在列表中存在的话(不过它可能并不在)。
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']