| 
 | 
 
 
发表于 2021-3-22 10:36:11
|
显示全部楼层
 
 
 
先回答第2个问题: 
x[:]是列表切片,切片的工作原理,是将列表中的片段(自起始索引始和终点索引止),拷贝后生成新列表 
x = [1,2,3,4,5,6,7,8,9] 
a = x # 普通赋值 
b = x[:] 
c = x[:] 
id(x) 
id(a) 
id(b) 
id(c)  # 可以看出,a和x是同一个列表,b和c已经是2个列表了,因为每切片操作一次,就生成了一个新列表,尽管内容完全一样 
---2---> 
所以你代码中其实有2个问题 
for … in …  循环中,直接对列表操作,索引是持续进行的,会存在跳过元素的情况 
例如,把你的循环段代码修改如下: 
- a = x[:]
 
 - for i in a:
 
 -         if i in y:
 
 -                 a.remove(i)
 
 - print(a)
 
  复制代码 
你会发现程序过程如下: 
第1次循环, 
i = 1,if判断为真,执行a.remove(1) 
第2次循环,索引第2个元素,因为列表已经删除了第1个元素,此时第2个元素是3 
i = 3,  if判断为真,执行a.remove(3) 
因此,想实现你的思路,代码最好这样写,也就是复制新列表,移除元素在复制的新列表中执行: 
- x = [1,2,3,4,5,6,7,8,9]
 
 - y = [1,2,3,4]
 
 - a = x[:]
 
 - for i in x:
 
 -     if i in y:
 
 -         a.remove(i)
 
 - print(a)
 
  复制代码 
 
 
 |   
 
 
 
 |