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

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)

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


当前回答

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

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

B //需要删除的元素

counter = a.count(b)

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

print(a)

其他回答

使用一个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 =[] //这是你的列表

B //需要删除的元素

counter = a.count(b)

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

print(a)
 list1=[1,2,3,3,4,5,6,1,3,4,5]
 n=int(input('enter  number'))
 while n in list1:
    list1.remove(n)
 print(list1)

例如,我们想要从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版本中编写的,所以您可能需要针对旧版本进行调整。

如果你知道要删除什么值,这里有一个简单的方法(就像我能想到的一样简单):

a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4]
while a.count(1) > 0:
    a.remove(1)

你会得到 [0,0,2,3,4]