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)

 

posted on 2018-07-10 22:16  铁子  阅读(285)  评论(0编辑  收藏  举报