鱼C论坛

 找回密码
 立即注册
查看: 1210|回复: 7

[已解决]for循环删除元素遗漏

[复制链接]
发表于 2020-6-29 17:37:09 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

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

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

你的理解是对的哈,那我们列表切片等价浅拷贝一次就不影响了
array=["aaa","acc","baa","bbb","bcc"]
for each in array[:]:
     if "b" in each:
           array.remove(each)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-29 17:40:04 | 显示全部楼层    本楼为最佳答案   

你的理解是对的哈,那我们列表切片等价浅拷贝一次就不影响了
array=["aaa","acc","baa","bbb","bcc"]
for each in array[:]:
     if "b" in each:
           array.remove(each)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 20:20:51 From FishC Mobile | 显示全部楼层
好的,谢谢。
不过我一直不明白array和array[:]的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 20:22:27 | 显示全部楼层
348625228 发表于 2020-6-29 20:20
好的,谢谢。
不过我一直不明白array和array[:]的区别

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

重新拷贝了一份就不是在原列表上进行遍历
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:11:10 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-6-29 20:22
array[:]  可以等价于  array.copy()

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

那就是说for又重新重头开始了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:12:43 | 显示全部楼层
348625228 发表于 2020-6-29 21:11
那就是说for又重新重头开始了?

不是  for 循环按照原列表顺序来的  ,列表内元素的移除不影响拷贝后的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:26:31 From FishC Mobile | 显示全部楼层
意思是说for操作的是提前准备好的静态的列表,而不再是remove操作后动态的了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 22:23:26 From FishC Mobile | 显示全部楼层
相当于借助一个列表去操作另外一个列表。
十分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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