A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晓龙 初级黑马   /  2018-5-31 17:38  /  1127 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

之前在调试课堂作业中的一道题时,发现了之前没有注意到的一点,在这里分享一下
总结: 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遍历,看结果如何,然后在一步步调试,即可发现其中差别

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马