flyps 发表于 2017-5-9 21:46:22

请教一个Python中for循环的问题

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

>>> b =
>>> for i in b:
        if b != b:
                print(i)

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

这里会出现索引错误
---------------------------------------------------------------------------
>>> b =
>>> for i in b:
        if b != b:
                print(i)

               
1
2
1
2
1
2
>>>
为什么这里就不会出现错误呢?只是列表不同,麻烦解答一下,谢谢!!

flyps 发表于 2017-5-10 10:00:56

没有大神回复一下吗?

冬雪雪冬 发表于 2017-5-10 13:57:18

因为在程序1里面没有b, b

gopythoner 发表于 2017-5-10 15:01:10

帮你回答一个问题居然还要我给你鱼币10,你觉得这样有人给你解答么?

红门饕餮 发表于 2017-5-10 16:26:53

我也是觉得啊,帮你回答问题还要给你鱼币

flyps 发表于 2017-5-11 06:42:42

冬雪雪冬 发表于 2017-5-10 13:57
因为在程序1里面没有b, b

感谢回复,程序1出错我可以理解,
我所不能理解的是程序2为会不出错,因为到循环到最后一个数时,i+1是不存在的,应该会出现索引错误才对的

flyps 发表于 2017-5-11 06:43:29

gopythoner 发表于 2017-5-10 15:01
帮你回答一个问题居然还要我给你鱼币10,你觉得这样有人给你解答么?

不好意思,我设置错了,本想回复我,最佳答案我给10鱼币的

冬雪雪冬 发表于 2017-5-11 08:47:16

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

在for循环中i的值一直是1或2,i+1为2或3,不会出现索引错误的。

CastleChen 发表于 2017-5-11 08:51:13

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

列表和列表元素比较始终不等,所以b != b始终为真。

gopythoner 发表于 2017-5-11 09:16:15

2个列表中最大的元素都是2,也就是说,当你循环的时候能b能取到的最大值都是b
但是第一个列表只有2个元素,最多只能取得b,连b都没有哪来b?所以,第1个会报错,报错的意识是超出列表范围
第2个列表元素比较多,可以取到b,所以不报错(如果你把第2个列表中元素2换成5,第2个也会报错)

徒手撩萝莉 发表于 2017-5-11 09:18:24

沙发坐等大佬给答案

badaoqingchen 发表于 2017-5-11 15:19:13

3楼数得很清楚啊

当回首遇上转身 发表于 2017-5-11 22:16:36

上面回答的差不多了,我就是来水一帖的。。。

flyps 发表于 2017-5-23 15:22:08

多谢楼上几位的回复,谢谢
页: [1]
查看完整版本: 请教一个Python中for循环的问题