鱼C论坛

 找回密码
 立即注册
查看: 6046|回复: 13

[已解决]请教一个Python中for循环的问题

[复制链接]
发表于 2017-5-9 21:46:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 flyps 于 2017-5-11 06:36 编辑

>>> b = [1,2]
>>> for i in b:
        if b[i] != b[i+1]:
                print(i)

Traceback (most recent call last):
  File "<pyshell#6>", line 2, in <module>
    if b[i] != b[i+1]:
IndexError: list index out of range

这里会出现索引错误
---------------------------------------------------------------------------
>>> b = [1,2,1,2,1,2]
>>> for i in b:
        if b[i] != b[i+1]:
                print(i)

               
1
2
1
2
1
2
>>>
为什么这里就不会出现错误呢?只是列表不同,麻烦解答一下,谢谢!!
最佳答案
2017-5-10 13:57:18
因为在程序1里面没有b[2], b[3]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-10 10:00:56 | 显示全部楼层
没有大神回复一下吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 13:57:18 | 显示全部楼层    本楼为最佳答案   
因为在程序1里面没有b[2], b[3]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 15:01:10 | 显示全部楼层
帮你回答一个问题居然还要我给你鱼币10,你觉得这样有人给你解答么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 16:26:53 | 显示全部楼层
我也是觉得啊,帮你回答问题还要给你鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-11 06:42:42 | 显示全部楼层
冬雪雪冬 发表于 2017-5-10 13:57
因为在程序1里面没有b[2], b[3]

感谢回复,程序1出错我可以理解,
我所不能理解的是程序2为会不出错,因为到循环到最后一个数时,i+1是不存在的,应该会出现索引错误才对的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-11 06:43:29 | 显示全部楼层
gopythoner 发表于 2017-5-10 15:01
帮你回答一个问题居然还要我给你鱼币10,你觉得这样有人给你解答么?

不好意思,我设置错了,本想回复我,最佳答案我给10鱼币的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 08:47:16 | 显示全部楼层

回帖奖励 +2 鱼币

flyps 发表于 2017-5-11 06:42
感谢回复,程序1出错我可以理解,
我所不能理解的是程序2为会不出错,因为到循环到最后一个数时,i+1是 ...

在for循环中i的值一直是1或2,i+1为2或3,不会出现索引错误的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 08:51:13 | 显示全部楼层

回帖奖励 +2 鱼币

b是列表,而b[]是列表中的元素;
程序1中,当i取出第0个元素1时,b[i+1]等价于b[2],但你的列表b只有b[0]、b[1]两个元素,所以会报索引出界错误;
同理,在程序2中,b[i+1]只会取b[2]、b[3]这两个元素,列表b中有,所以不会报错。

列表和列表元素比较始终不等,所以b != b[i+1]始终为真。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 09:16:15 | 显示全部楼层

回帖奖励 +2 鱼币

2个列表中最大的元素都是2,也就是说,当你循环的时候能b[i+1]能取到的最大值都是b[3]
但是第一个列表只有2个元素,最多只能取得b[1],连b[2]都没有哪来b[3]?所以,第1个会报错,报错的意识是超出列表范围
第2个列表元素比较多,可以取到b[3],所以不报错(如果你把第2个列表中元素2换成5,第2个也会报错)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 09:18:24 | 显示全部楼层

回帖奖励 +2 鱼币

沙发坐等大佬给答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 15:19:13 | 显示全部楼层

回帖奖励 +2 鱼币

3楼数得很清楚啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-11 22:16:36 | 显示全部楼层
上面回答的差不多了,我就是来水一帖的。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 15:22:08 | 显示全部楼层
多谢楼上几位的回复,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 20:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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