码迷,mamicode.com
首页 > 编程语言 > 详细

python中列表,字典等必须要注意的事项

时间:2018-07-10 22:39:18      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:int   err   改变   输出   during   time   pycharm   ast   pyc   

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)

 

python中列表,字典等必须要注意的事项

标签:int   err   改变   输出   during   time   pycharm   ast   pyc   

原文地址:https://www.cnblogs.com/rcat/p/9288125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!