我想从列表中删除一个值,如果它存在于列表中(它可能不存在)。
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)
难道没有更简单的方法吗?
当前回答
另一种可能是使用set而不是list,如果set适用于您的应用程序。
IE中如果你的数据不是有序的,并且没有副本,那么
my_set=set([3,4,2])
my_set.discard(1)
是没有错误的。
通常,列表只是一个方便的容器,用于存放实际上是无序的项目。有些问题询问如何从列表中删除一个元素的所有出现。如果你一开始就不想被骗,一套也很方便。
my_set.add(3)
不改变上面的my_set。
其他回答
一句话:
a.remove('b') if 'b' in a else None
有时它很有用。
更简单:
if 'b' in a: a.remove('b')
使用一个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
我们也可以使用.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]
>>>
以下是如何做到这一点(不需要理解列表):
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,2,3,4,5]
要去除所有的事件,可以使用python中的filter函数。 例如,它看起来是这样的:
a = list(filter(lambda x: x!= 2, a))
因此,它将保留a != 2的所有元素。
只要拿出其中一项使用
a.remove(2)