鱼C论坛

 找回密码
 立即注册
查看: 2052|回复: 2

[已解决]Python3被列表去重搞迷糊了,求助

[复制链接]
发表于 2019-11-27 13:36:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下代码为2中列表去重,备用列表都一样,为啥只是先后遍历的顺序不同结果也不同,导致这种差异的原理是什么?

方法一:结果为[0, 1, 9, 10]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [2, 3, 4, 4, 5, 6, 6, 7, 8]
for x in b:
    if x in a:
        a.remove(x)
print(a)

方法二:结果为[0, 1, 3, 5, 7, 9, 10]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [2, 3, 4, 4, 5, 6, 6, 7, 8]
for x in a:
    if x in b:
        a.remove(x)
print(a)
最佳答案
2019-11-27 14:01:45
方法2:
循环1,指向0位,即数值0,不在b,继续到下一个;
循环2,指向1位,即数值1,不在b,继续到下一个;
循环3,指向2位,即数值2,在b,删除掉2,注意此时数值3在位置2;继续到下一个;
循环4,指向3位,即数值4,把数值3就跳过去了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-27 14:01:45 | 显示全部楼层    本楼为最佳答案   
方法2:
循环1,指向0位,即数值0,不在b,继续到下一个;
循环2,指向1位,即数值1,不在b,继续到下一个;
循环3,指向2位,即数值2,在b,删除掉2,注意此时数值3在位置2;继续到下一个;
循环4,指向3位,即数值4,把数值3就跳过去了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-27 14:33:35 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-27 14:46 编辑

      方法二在循环中修改控制循环的列表 a,所以,必须用列表 a 的副本来控制循环:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [2, 3, 4, 4, 5, 6, 6, 7, 8]
for x in a[:]:   # 用列表 a 的副本控制循环
    if x in b:
        a.remove(x)
print(a)
     这个代码最后输出的信息是:[0, 1, 9, 10],与 方法一相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 19:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表