问题:给定一个列表,想要删除所有符合要求的值?
这里想要删除数字2
l = list([0, 1, 2, 2, 2, 2, 3, 4])
for k, v in enumerate(l):
print(k, v)
if v == 2:
l.pop(k)
print(l)
print(l)
执行结果如下:
0 0
[0, 1, 2, 2, 2, 2, 3, 4]
1 1
[0, 1, 2, 2, 2, 2, 3, 4]
2 2
[0, 1, 2, 2, 2, 3, 4]
3 2
[0, 1, 2, 2, 3, 4]
4 3
[0, 1, 2, 2, 3, 4]
5 4
[0, 1, 2, 2, 3, 4]
[0, 1, 2, 2, 3, 4]
显然并不正确,这种方法不适合去除所有的符合要求的值,得用while循环,控制迭代器的迭代,他这个迭代器是一直向后的,一旦遇到重复值时,就会略过,比如你删除了2,但迭代器会增加1,恰好原本位置的2前移,就错过了。
正确代码如下:
c = 0
le = len(l)
i = 0
while i < le - c:
if l[i] == 2:
l.remove(2)
c += 1
else:
i += 1
print(l)
#[0, 1, 3, 4]
所以for循环中删除列表的元素需要注意。