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

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)

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


当前回答

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

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

其他回答

以下是如何做到这一点(不需要理解列表):

def remove_all(seq, value):
    pos = 0
    for item in seq:
        if item != value:
           seq[pos] = item
           pos += 1
    del seq[pos:]

这个例子是快速的,并且会从列表中删除一个值的所有实例:

a = [1,2,3,1,2,3,4]
while True:
    try:
        a.remove(3)
    except:
        break
print a
>>> [1, 2, 1, 2, 4]

当nums是列表,c是要删除的值时:

要删除列表中第一个出现的c,只需执行以下操作:

if c in nums:
    nums.remove(c)

要从列表中删除所有出现的c,请执行以下操作:

while c in nums:
    nums.remove(c)

添加异常处理将是最佳实践,但我主要想演示如何从列表中删除所有出现的元素。

考虑:

a = [1,2,2,3,4,5]

要去除所有的事件,可以使用python中的filter函数。 例如,它看起来是这样的:

a = list(filter(lambda x: x!= 2, a))

因此,它将保留a != 2的所有元素。

只要拿出其中一项使用

a.remove(2)

例如,我们想要从x中移除所有的1,我是这样做的:

x = [1, 2, 3, 1, 2, 3]

这是我的方法的一个实际应用:

def Function(List, Unwanted):
    [List.remove(Unwanted) for Item in range(List.count(Unwanted))]
    return List
x = Function(x, 1)
print(x)

这是我的方法,只用一行:

[x.remove(1) for Item in range(x.count(1))]
print(x)

两者的输出都是:

[2, 3, 2, 3, 2, 3]

希望这能有所帮助。 PS,请注意这是在3.6.2版本中编写的,所以您可能需要针对旧版本进行调整。