找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2126|回复: 4

[求助] 新手运行循环语句出现问题

1

主题

2

帖子

2

积分

贫民

积分
2
厨师学徒 发表于 2018-4-19 15:04:36 来自手机 | 显示全部楼层 |阅读模式
运行如下语句:
m=[1,2,3,4,5]
for i in m:
      m.remove(i)
print(m)

为什么运行结果,是仅仅删除了奇数位的列表内容,而不是全部删除。即输出结果为[2,4]
回复

使用道具 举报

0

主题

13

帖子

13

积分

贫民

积分
13
lhdnb 发表于 2018-4-19 16:09:53 | 显示全部楼层
第一次删除后m已经发生改变  m[1] = 3   不是你想象中的 = 2
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
厨师学徒  楼主| 发表于 2018-4-19 16:35:05 | 显示全部楼层
我不是很明白,for 循环中,遍历的第一个元素是1,删除后,列表为m2=[2,3,4,5]
那么遍历下一个元素时,为什么不是从m[0],即m2的第一个元素2开始删除?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
运维-开发 发表于 2018-4-19 17:26:03 | 显示全部楼层
本帖最后由 运维-开发 于 2018-4-19 17:44 编辑
厨师学徒 发表于 2018-4-19 16:35
我不是很明白,for 循环中,遍历的第一个元素是1,删除后,列表为m2=[2,3,4,5]
那么遍历下一个元素时, ...

1,首先你要明白for循环是用下标的。
2,for循坏用了0下标,下一次就不能用0下标了,而是用1下标。

代码分析过程:

  1. m = [1,2,3,4,5]
  2. for i in m:
  3.     print(i)
  4.     m.remove(i)
  5.     print(m)
复制代码


执行结果:


1
[2, 3, 4, 5]
3
[2, 4, 5]
5
[2, 4]

你会发现,此时for循环的下标是为0的,所以就删除第1个元素就是1.  列表就是【2,3,4,5】,此时你在for循坏的时候,for循环的下标就是1了。那么就是3,所以列表就是【2,4,5】,接着for循环的时候,for循环的下标就是2,所以删除的就是5.
所以最终结果就是【2,4】


回复 支持 反对

使用道具 举报

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

本版积分规则

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