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

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)

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


当前回答

也许你的解决方案适用于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)

其他回答

要删除一个元素的第一次出现,使用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']

我们也可以使用.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]
>>> 

通过索引除希望删除的元素之外的所有内容来覆盖列表

>>> s = [5,4,3,2,1]
>>> s[0:2] + s[3:]
[5, 4, 2, 1]

更普遍的是,

>>> s = [5,4,3,2,1]
>>> i = s.index(3)
>>> s[:i] + s[i+1:]
[5, 4, 2, 1]
 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)

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

if c in a:
    a.remove(c)

or:

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

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