鱼C论坛

 找回密码
 立即注册
查看: 1654|回复: 11

[已解决]刚那个帖子出问题了——列表的索引问题

[复制链接]
发表于 2021-2-9 15:44:02 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Python初学者8号 于 2021-2-9 17:00 编辑

刚那个帖子总是不对劲,我重发一个
我在写程序的时候我发现很奇怪的现象:索引问题。
话不多说直接上代码
l = []
 for i in range(6):#  i = 0 1 2 3 4 5
        l.append(i*10)
        print('l = ',l)
        print(l[i]+l[i+1])
结果是:
0
10
30
50
70
90


这里面,发生了很奇怪的事情:                在i = 0的时候,先执行的是 l.append(i*10),他的结果是让空列表l产生第一个元素l[0] = 0
         在执行第二句的时候,是打印出l[0]和l[1]。这个时候神器的事情出现了!!按道理这时候l只有一个元素l[0](也就是0),但是这里却没有报错出现了结果为0!!!      
        而且在执行最后的时候 i = 5,这时候不是l[5+1]不是也应该超出索引了吗???



我反手写了另一个代码:
 for i in range(6):#  i = 0 1 2 3 4 5
        l.append(i*10)
        print('l = ',l)
        print(l[i],l[i+1])
运行的结果居然是
#运行的结果是
l = [0]
Traceback (most recent call last):
File "<pyshell#50>", line 4, in <module>
print(l[i],l[i+1])
IndexError: list index out of range

这真是牛逼他妈给牛逼开门,牛逼到家了,我是没搞懂咋回事,有没有大佬给看看!!


最佳答案
2021-2-9 17:07:42
本帖最后由 hrp 于 2021-2-9 17:11 编辑
Python初学者8号 发表于 2021-2-9 17:02
@qiuyouzhi @wp231957 @昨非 @wp231957 @°蓝鲤歌蓝 @crisfo @hrp

没有人能比我更憨憨,我的第一个代码 ...


都一样,不管怎么改,循环中l[i+1]必然报错。
还是那句话,如果用shell测试的,那之前你应该是用过l列表并且没清空,才会阴差阳错没有报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 15:49:38 | 显示全部楼层

回帖奖励 +1 鱼币

??
我这里两个代码都会报错啊
你是不是列表没有清空鸭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 16:12:38 From FishC Mobile | 显示全部楼层

回帖奖励 +1 鱼币

第二个代码l都没有初始化,能运行??
PS,用l做变量,不别扭啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 16:17:03 | 显示全部楼层

回帖奖励 +1 鱼币

你的第一段代码(字上面的那个)就是有问题的,程序会直接报错并没有你说的结果出来
print(l[i],l[i+1])后一个索引值越界了

考虑是不是你使用了全局列表l,上面没有清空或者多此append操作后重复添加了多个元素,造成该报错索引越界时没有报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 16:17:33 From FishC Mobile | 显示全部楼层
我怀疑你是在控制台下调试的代码,可能以前申请过变量,所以下面代码能直接用
也就出现了你所说的乱七八糟的现象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 16:41:53 | 显示全部楼层

回帖奖励 +1 鱼币

我这里报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 16:49:30 | 显示全部楼层

回帖奖励 +1 鱼币

 l = []
 for i in range(6):
        l.append(i)
        print('l = ',l)
        print(l[i],l[i+1])

        
l =  [0]
Traceback (most recent call last):
  File "<pyshell#5>", line 4, in <module>
    print(l[i],l[i+1])
IndexError: list index out of range

报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 16:54:10 From FishC Mobile | 显示全部楼层
我怀疑你在shell测试,并且测试前没清空l。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-9 17:02:28 | 显示全部楼层
@qiuyouzhi @wp231957 @昨非 @wp231957 @°蓝鲤歌蓝 @crisfo @hrp

没有人能比我更憨憨,我的第一个代码打错了,不是print(l[i],l[i+1]).应该是print(l[i]+l[i+1])
我已经修改了。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 17:07:42 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrp 于 2021-2-9 17:11 编辑
Python初学者8号 发表于 2021-2-9 17:02
@qiuyouzhi @wp231957 @昨非 @wp231957 @°蓝鲤歌蓝 @crisfo @hrp

没有人能比我更憨憨,我的第一个代码 ...


都一样,不管怎么改,循环中l[i+1]必然报错。
还是那句话,如果用shell测试的,那之前你应该是用过l列表并且没清空,才会阴差阳错没有报错。

评分

参与人数 1荣誉 +1 鱼币 +5 收起 理由
wp231957 + 1 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-9 18:49:40 | 显示全部楼层
wp231957 发表于 2021-2-9 16:12
第二个代码l都没有初始化,能运行??
PS,用l做变量,不别扭啊

for i in range(100):
    pass
i就直接遍历range(100),这是Python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-9 19:34:17 | 显示全部楼层
感谢大家,确实是shell的问题,我也觉得很奇怪,我使用了sublime测试就是好的,感谢大家提供意见!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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