python中for + remove的坑
假如有个集合[‘a’, ‘b’, ‘c’, ‘d’, e’, ‘f’, ‘g’],然后使用for循环去遍历,然后指定删除c跟d,运行后你会发现只删除掉了c,并没有删除掉d,这是为什么呢?
查了资料发现,是for循环的问题。因为for循环实际是循环的列表下标(索引),同时由于列表的可变性,每一次删除一个元素,列表的长度就会发生变化,元素的索引也会发生变化。
举个例子:
第一次循环,循环索引为0,此时索引为0的元素是a,不满足条件。集合为[‘a’, ‘b’, ‘c’, ‘d’, e’, ‘f’, ‘g’]
第二次循环,循环索引为1,此时索引为1的元素是b,不满足条件。集合为[‘a’, ‘b’, ‘c’, ‘d’, e’, ‘f’, ‘g’]
第三次循环,循环索引为2,此时索引为2的元素是c,满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’]
第四次循环,循环索引为3,此时索引为3的元素是e,不满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’]
第五次循环,循环索引为4,此时索引为4的元素是f,不满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’]
第六次循环,循环索引为5,此时索引为5的元素是g,不满足条件。集合为[‘a’, ‘b’, ‘d’, e’, ‘f’, ‘g’]
解决办法
lst=['a', 'b', 'c', 'd', 'e', 'f', 'g']
while True:
for i in lst:
if i==c or i == d:
lst.remove(i)
#如果删除了元素,退出此次遍历,开始遍历新列表
break
else:
break
print(lst)
结果[‘a’, ‘b’,’ e’, ‘f’, ‘g’]
还没有评论,来说两句吧...