PC加班狗 发表于 2019-11-27 13:36:19

Python3被列表去重搞迷糊了,求助

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

方法一:结果为
a =
b =
for x in b:
    if x in a:
      a.remove(x)
print(a)

方法二:结果为
a =
b =
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就跳过去了。

jackz007 发表于 2019-11-27 14:33:35

本帖最后由 jackz007 于 2019-11-27 14:46 编辑

      方法二在循环中修改控制循环的列表 a,所以,必须用列表 a 的副本来控制循环:
a =
b =
for x in a[:]:   # 用列表 a 的副本控制循环
    if x in b:
      a.remove(x)
print(a)
   这个代码最后输出的信息是:,与 方法一相同
页: [1]
查看完整版本: Python3被列表去重搞迷糊了,求助