我想从列表中删除一个值,如果它存在于列表中(它可能不存在)。
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 = [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)
添加异常处理将是最佳实践,但我主要想演示如何从列表中删除所有出现的元素。
其他回答
也许你的解决方案适用于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)
以下是如何做到这一点(不需要理解列表):
def remove_all(seq, value):
pos = 0
for item in seq:
if item != value:
seq[pos] = item
pos += 1
del seq[pos:]
一句话:
a.remove('b') if 'b' in a else None
有时它很有用。
更简单:
if 'b' in a: a.remove('b')
这就是我的答案,用while和for就可以了
def remove_all(data, value):
i = j = 0
while j < len(data):
if data[j] == value:
j += 1
continue
data[i] = data[j]
i += 1
j += 1
for x in range(j - i):
data.pop()
通常,如果你告诉Python做一些它不能做的事情,Python会抛出一个异常,所以你必须这样做:
if c in a:
a.remove(c)
or:
try:
a.remove(c)
except ValueError:
pass
异常不一定是坏事,只要它是您所期望的并正确处理的。