鱼C论坛

 找回密码
 立即注册
查看: 870|回复: 2

为何这个输入就改个顺序但是输出却不一样呢?

[复制链接]
发表于 2019-7-5 15:36:32 | 显示全部楼层 |阅读模式

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

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

x
>>> a = [0,1,2,False,'',34]
>>> for i in a:
        if not i:
                a.remove(i)

               
>>> a
[1, 2, '', 34]
>>> a = [0,1,2,False,34,'']
>>> for i in a:
        if not i:
                a.remove(i)

               
>>> a
[1, 2, 34]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-5 16:09:29 | 显示全部楼层
本帖最后由 shake_a_tree@16 于 2019-7-5 16:19 编辑

循环会改变a的值,这个对循环条件的判断是有影响的。a中第一个元素是0,循环的时候,i为0,就会执行语句a.remove(i),这里就影响了a,这个对循环也是有影响的,这里之后,i的值应该是1,但是,由于前面这remove的操作,i的下一个值会是2,而不是1,这就跳开了1.同样的,Flase后面那个‘’也是被跳过了。
下面的是不会跳的写法

a = [0,1,2,False,'',34]
b = []
for i in a:
    if i:
        b.append(i)
print(b)


print('******************')
a = [0,1,2,False,34,'']
b=[]
for i in a:
    if i:
        b.append(i)
print(b)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-5 22:43:20 | 显示全部楼层
迭代器循环,不要去修改这个迭代对象,会出问题的。如果你用字典这种哈希值去循环,直接就报错了,这是不可修改对象
非要这样用,加个切片
  1. for i in a[:]:
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-16 18:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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