黑马程序员技术交流社区

标题: for循环遍历列表 [打印本页]

作者: 晓龙    时间: 2018-5-31 17:35
标题: for循环遍历列表
之前在调试课堂作业中的一道题时,发现了之前没有注意到的一点,在这里分享一下
总结: 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遍历,看结果如何,然后在一步步调试,即可发现其中差别


作者: wuzhengjun    时间: 2018-6-2 17:22
好神奇好神奇




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2