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

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)

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


当前回答

当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)

这是一个效率较低的解决方案,但它仍然有效:

A =[] //这是你的列表

B //需要删除的元素

counter = a.count(b)

while counter > 0:
    if b in a:
       a.remove(b)
       counter -= 1

print(a)

也许你的解决方案适用于int型,但它不适用于我的字典。

一方面,remove()对我不起作用。但它可能适用于基本类型。我猜下面的代码也是从对象列表中删除项目的方法。

另一方面,'del'也没有正常工作。在我的例子中,使用python 3.6:当我试图用'del'命令从'for' bucle中的列表中删除一个元素时,python会更改进程中的索引,bucle会提前停止。只有当你以相反的顺序逐个删除元素时,它才会起作用。通过这种方式,当你遍历未决元素数组时,你不会改变它的下标

然后,我用:

c = len(list)-1
for element in (reversed(list)):
    if condition(element):
        del list[c]
    c -= 1
print(list)

在“列表”就像[{key1: value1 '}, {key2: value2}, {key3: value3},…]

你也可以使用enumerate来实现更多python化:

for i, element in enumerate(reversed(list)):
    if condition(element):
        del list[(i+1)*-1]
print(list)

你可以这样做

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

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

try:
    a.remove(6)
except:
    pass

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

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