348625228 发表于 2020-6-29 17:37:09

for循环删除元素遗漏

如:
array=[“aaa”,“acc”,“baa”,“bbb”,“bcc”]
for each in array:
   if “b” in each:
         array.remove(each)

这样的话“bbb”不会被删除,个人认为列表元素变动而for继续递增 所以漏一个,但除了再次for外,不知如何处理,请老师们帮忙解惑

Twilight6 发表于 2020-6-29 17:40:04


你的理解是对的哈,那我们列表切片等价浅拷贝一次就不影响了

array=["aaa","acc","baa","bbb","bcc"]
for each in array[:]:
   if "b" in each:
         array.remove(each)

348625228 发表于 2020-6-29 20:20:51

好的,谢谢。
不过我一直不明白array和array[:]的区别

Twilight6 发表于 2020-6-29 20:22:27

348625228 发表于 2020-6-29 20:20
好的,谢谢。
不过我一直不明白array和array[:]的区别

array[:]可以等价于array.copy()

重新拷贝了一份就不是在原列表上进行遍历

348625228 发表于 2020-6-29 21:11:10

Twilight6 发表于 2020-6-29 20:22
array[:]可以等价于array.copy()

重新拷贝了一份就不是在原列表上进行遍历

那就是说for又重新重头开始了?

Twilight6 发表于 2020-6-29 21:12:43

348625228 发表于 2020-6-29 21:11
那就是说for又重新重头开始了?

不是for 循环按照原列表顺序来的,列表内元素的移除不影响拷贝后的

348625228 发表于 2020-6-29 21:26:31

意思是说for操作的是提前准备好的静态的列表,而不再是remove操作后动态的了?

348625228 发表于 2020-6-29 22:23:26

相当于借助一个列表去操作另外一个列表。
十分感谢!
页: [1]
查看完整版本: for循环删除元素遗漏