找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3080|回复: 7

[求助] 对list,能否边遍历边修改?

1

主题

2

帖子

2

积分

贫民

积分
2
jkawhfsfsdli 发表于 2020-8-26 15:44:12 | 显示全部楼层 |阅读模式
本帖最后由 jkawhfsfsdli 于 2020-8-27 09:52 编辑

有如下两段代码:
代码1:
lst = [5,6,77,45,22,12,24]
for i in lst :
    if i % 2 == 0 :
        lst.remove(i)
print(lst)

执行结果错误。

代码2 :
lst = [12, 24, 35, 24, 88, 120, 155, 88, 120, 155]
for i in lst :

    if lst.count(i) > 1 :

        lst.remove(i)
print(lst)

执行结果正确。
请问为什么两段代码都是一边遍历list,一边修改了内容。执行结果为什么不一样?是不是这两段代码的写法都是错误的?



回复

使用道具 举报

3

主题

8

帖子

8

积分

贫民

积分
8
Uncle0 发表于 2020-8-26 19:43:57 | 显示全部楼层
代码1,是删除List中能被2整除的值
代码2,是删除List中的重复值
结果当然不一样了,不知道你是否这个问题,我也是初学者,如果解释错误,请谅解
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
jkawhfsfsdli  楼主| 发表于 2020-8-27 09:51:19 | 显示全部楼层
Uncle0 发表于 2020-8-26 19:43
代码1,是删除List中能被2整除的值
代码2,是删除List中的重复值
结果当然不一样了,不知道你是否这个问题, ...

我问的不是两段代码的执行结果。
第一段代码是边遍历边修改list,执行结果是错误的,说明第一代码写得不对。
但是第二段代码也是边遍历边修改list,但是执行结果是正确的。那第二段代码写得对吗?

为什么会这样?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
天明月圆 发表于 2020-8-28 13:26:07 | 显示全部楼层
D:\捕获1.png
没有错啊
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
天明月圆 发表于 2020-8-28 13:29:14 | 显示全部楼层
D:\捕获1.png

PS D:\vscodeworkspace> python -u "d:\vscodeworkspace\wiresharkParse-py3.8\hello.py"
[5, 77, 45, 12]
PS D:\vscodeworkspace> python -u "d:\vscodeworkspace\wiresharkParse-py3.8\hello.py"
[5, 77, 45, 12]
[12, 35, 24, 88, 120, 155]

但这种方式容易出错,最好另生成一个列表
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
天明月圆 发表于 2020-8-28 14:21:48 | 显示全部楼层
我懂你的意思了,这种写法是有问题的,第一种,你删除当前元素后,比如22删除后,12到原来22的位置,但是因为该位置你已经判断过了,就接着往后面判断了,所以12还是存在。第二种我觉得运行结果也是错的,不知道你为什么说运行结果是对的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
小李探花 发表于 2020-9-4 13:31:02 | 显示全部楼层
建议不要对列表进行边遍历边删除(如remove)
因为当remove列表中的一个元素后,列表长度发生了变化
而for循环的遍历执行是按照脚标顺序进行的,所以会出现遍历
遗漏的情况。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
hahaone 发表于 2020-9-4 20:45:42 | 显示全部楼层
lst = [5, 6, 77, 45, 22, 12, 24]
for i in lst[::-1]:
    if i % 2 == 0:
        lst.remove(i)
print(lst)
第一个可以这样写,从后往前删就不会出现这样的问题了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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