之前在调试课堂作业中的一道题时,发现了之前没有注意到的一点,在这里分享一下 总结: for遍历列表时,是遍历原始列表索引,并取对应值的,如果在循环体内部改变了列表的值,那根据原始列表的索引来查找新列表中的数据,就会导致有些数据遍历不到 下面举例说明 : 列表去重[2,3,4,5,4,3,5,6,7,8,9,0,9,8,7,6,5,1,2,3,4,9,0]; 去除重复的内容 : 下面是我用的方法: num_list = [2, 3, 4, 5, 4, 3, 5, 6, 7, 8, 9, 0, 9, 8, 7, 6, 5, 1, 2, 3, 4, 9, 0] # 这里复制一个相同的列表用于循环,即保证原有列表的值都可以依次遍历到 # 否则在循环体内部用remove方法改变原有删除原有列表的值,就不会 num_list_copy = num_list.copy() for i in num_list_copy: while True: if num_list.count(i) > 1: num_list.remove(i) else: break print(num_list) 代码第一句,num_list_copy复制了原有列表,用于循环, 因为在循环体内部用remove方法去删除了num_list多余的值,这时如果再用num_list去循环,由于索引值是根据一开始的num_list生成的,所以有些数据是遍历不到的,结果就会有差别. 具体可把复制列表那句话注释,然后直接用num_list遍历,看结果如何,然后在一步步调试,即可发现其中差别
|