|
发表于 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)
复制代码
|
|