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

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)

难道没有更简单的方法吗?


当前回答

我们也可以使用.pop:

>>> lst = [23,34,54,45]
>>> remove_element = 23
>>> if remove_element in lst:
...     lst.pop(lst.index(remove_element))
... 
23
>>> lst
[34, 54, 45]
>>> 

其他回答

正如许多其他答案所述,list.remove()将工作,但如果项不在列表中则抛出ValueError。在python 3.4+中,有一个有趣的方法来处理这个问题,使用suppress contextmanager:

from contextlib import suppress
with suppress(ValueError):
    a.remove('b')

通常,如果你告诉Python做一些它不能做的事情,Python会抛出一个异常,所以你必须这样做:

if c in a:
    a.remove(c)

or:

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

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

一句话:

a.remove('b') if 'b' in a else None

有时它很有用。

更简单:

if 'b' in a: a.remove('b')

使用一个for循环和一个条件:

def cleaner(seq, value):    
    temp = []                      
    for number in seq:
        if number != value:
            temp.append(number)
    return temp

如果你想删除一些,但不是全部:

def cleaner(seq, value, occ):
    temp = []
    for number in seq:
        if number == value and occ:
            occ -= 1
            continue
        else:
            temp.append(number)
    return temp

你可以这样做

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

但以上需要在list a中搜索2次6,所以尝试except会更快

try:
    a.remove(6)
except:
    pass