为何在for循环内外创建列表会产生不同结果?
为什么列表去重用"in"/"not in"时,空列表创建位置会影响结果?
正确代码的执行逻辑
my_list = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9] new_list = [] # 只初始化一次空列表 for i in my_list: if i not in new_list: new_list.append(i) print("The list with unique elements only:") print(new_list)
这里new_list在循环外部创建,整个循环过程中这个列表会持续保留之前的结果:
- 第一次循环i=1,new_list为空,1不在里面,添加后new_list=[1]
- 第二次i=2,不在[1]里,添加后变成[1,2]
- 第三次i=4,不在里面,添加成[1,2,4]
- 第四次i=4,已经在new_list里,直接跳过
- 后续元素以此类推,最终累积出所有不重复的元素。
错误代码的核心问题
my_list = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9] for i in my_list: new_list = [] # 每次循环都重新创建空列表! if i not in new_list: new_list.append(i) print("The list with unique elements only:") print(new_list)
这里new_list = []被放在了循环内部,意味着每一轮循环都会把new_list重置成空列表:
- 第一次循环i=1,new_list被设为空,添加1后变成[1],但循环结束后,下一次循环又会把它清空
- 第二次i=2,new_list重新变成空,添加2后是[2],循环结束再次被清空
- ...
- 最后一次循环i=9,new_list被重置为空,添加9后变成[9],循环结束后没有后续重置,所以最终打印的就是这最后一次循环留下的[9]
说白了:循环内创建空列表等于每次都把之前的去重结果扔掉,只保留最后一次循环处理的元素。
内容的提问来源于stack exchange,提问作者Lesoko
相关产品推荐
相关产品推荐

