1.python中的列表不能够遍历删除
1 #python列表我们不能够遍历删除 2 li = [1, 2, 3, 4, 5, 6] 3 for i in range(len(li)): 4 print(i) 5 del li[i] 6 print(li) 7 # 输出结果: 8 # Traceback (most recent call last): 9 # 0 10 # [2, 3, 4, 5, 6] 11 # File "C:/Users/XZB/PycharmProjects/s1/day7/python注意事项.py", line 5, in <module> 12 # 1 13 # del li[i] 14 # [2, 4, 5, 6] 15 # IndexError: list assignment index out of range 16 # 2 17 # [2, 4, 6] 18 # 3
原因:首先,列表是可变类型的数据,我们每进行一次修改,都会在原数据类型上面进行修改,然而for遍历有一个机制,在第一次时候,它就已经将需要遍历多少次等相关存储起来了,所以后面的遍历不会再判断需要进行多少次数,所以,在for遍历删除列表中的元素的时候,我们没遍历一次,列表中的元素都会改变,然而,for遍历的机制还是最初的那样子,所以会产生删除有误的问题!
2.python中的字典不能够遍历删除
1 dic = {'k1' : 'v1', 'k2' : 'v2', 'a3' : 'v3'} 2 for i in dic: 3 print(i) 4 if 'k' in i: 5 del dic[i] 6 #输出结果:Traceback (most recent call last): 7 # k1 8 # File "C:/Users/XZB/PycharmProjects/s1/day7/python注意事项.py", line 20, in <module> 9 # for i in dic: 10 # RuntimeError: dictionary changed size during iteration
如果我们将不含有k的键值对打印出来,有如下两种方法:
1 #方法一 2 dic = {'k1' : 'v1', 'k2' : 'v2', 'a3' : 'v3'} 3 dic1 = {} 4 for i in dic: 5 if 'k' not in i: 6 dic1.setdefault(i, dic[i]) 7 dic = dic1 8 print(dic) 9 10 #方法二 11 l = [] 12 dic = {'k1' : 'v1', 'k2' : 'v2', 'a3' : 'v3'} 13 for i in dic: 14 if 'k' in i: 15 l.append(i) 16 17 for i in l: 18 del dic[i] 19 20 print(dic)