已有183人关注
教材视频代码问题
发表在Python图书答疑 2021-11-25 悬赏:1 学分 《零基础学Python》第5章 字符串及正则表达式
是否精华
版块置顶:

room = []

for i in range(1,5):

    room.append([])

    for j in range(1,8):

        room[i-1].append(i*1000+100+j)

        

print(room)

此处有1个问题,room.append([])是设置了4行,i是1-4,相应的room这个变量也应该是1-4行, 为什么还要room[i-1],这样room不是变成3行了?

分享到:
精彩评论 12
kiku
学分:317 LV5
2021-11-25
沙发

这跟行有啥关系??代码你都没读懂。

room定义了一个空的列表[],然后进入循环,i=1,然后在这个空列表里面追加一个元素'[]'(也是一个空列表),j=1,在room[0](也就是第一个空列表里面的第一个元素即追加的那个空列表)里面追加一个元素:1*1000+100+1=1101,现在的room是这样的[[1101]],然后j=2,再循环. . .

fengqing518
学分:53 LV3
2021-11-30
板凳

kiku 发表于2021-11-25 14:46

这跟行有啥关系??代码你都没读懂。

room定义了一个空的列表[],然后进入循环,i=1,然后在这个空列表里面追加一个元素'[]'(也是一个空列表),j=1,在room[0](也就是第一个空列表里面的第一个元素即追加的那个空列表)里面追加一个元素:1*1000+100+1=1101,现在的room是这样的[[1101]],然后j=2,再循环. . .

感谢大神回复,这里确实有不明白的地方

for i in range(1,5):

     room.append()

[[]]

[[], []]

[[], [], []]

[[], [], [], []]

其实是增加了4行,并且每行里增加一个[]

但下面的room[i-1]就不明白了,减去1不是让每行少一个[]吗?

无语_mrkj
学分:3155 LV11
2021-11-30
地板

room[i-1]中的i-1表示的是要显示元素的索引,i=1时,i-1=0,表示获取索引值为0的元素的值,i=2时,i-1=1,表示获取索引值为1的元素的值。每行[]的个数是添加时指定的。

kiku
学分:317 LV5
2021-11-30
4L

fengqing518 发表于2021-11-30 02:45

感谢大神回复,这里确实有不明白的地方

for i in range(1,5):

     room.append()

[[]]

[[], []]

[[], [], []]

[[], [], [], []]

其实是增加了4行,并且每行里增加一个[]

但下面的room[i-1]就不明白了,减去1不是让每行少一个[]吗?

初始的room是一个空列表,i循环就是向里面添加几个空列表,也就是你所理解的行(事实上跟行真的没啥关系,添加的称为元素,类型是列表),j循环就是向那几个空列表里面依次添加元素,i-1是索引,用来定位那几个空列表,因为索引是从0开始的而i是从1开始的所以要-1(换句话说当索引=0的时候room[0]就是第一个元素即添加的第一个空列表)。怎么感觉你好像不太懂列表和索引的相关知识

kiku
学分:317 LV5
2021-11-30
5L

fengqing518 发表于2021-11-30 02:45

感谢大神回复,这里确实有不明白的地方

for i in range(1,5):

     room.append()

[[]]

[[], []]

[[], [], []]

[[], [], [], []]

其实是增加了4行,并且每行里增加一个[]

但下面的room[i-1]就不明白了,减去1不是让每行少一个[]吗?

room.append()就是直接在列表room的最后添加元素,room[i-1].append()则是在room列表里面索引为i-1的这个元素的最后添加元素

fengqing518
学分:53 LV3
2021-12-02
6L

无语_mrkj 发表于2021-11-30 10:51

room[i-1]中的i-1表示的是要显示元素的索引,i=1时,i-1=0,表示获取索引值为0的元素的值,i=2时,i-1=1,表示获取索引值为1的元素的值。每行[]的个数是添加时指定的。

感谢老师的回复,我还是有点疑问,因为i是(1、2、3、4),那么i-1也就相应的变成了(0、.1、2.、3),这样就等于少循环一次,所以我认为这个room不应该是room(i-1),而应该直接是room(i),不知道我这个理解是不是有问题?

fengqing518
学分:53 LV3
2021-12-02
7L

kiku 发表于2021-11-30 15:10

room.append()就是直接在列表room的最后添加元素,room[i-1].append()则是在room列表里面索引为i-1的这个元素的最后添加元素

谢谢大神,还是有不太明白的地方,我的理解可以直接使用i,也是1、2、3、4,如果是i-1就是0、1、2、3了

kiku
学分:317 LV5
2021-12-02
8L

fengqing518 发表于2021-12-02 05:11

感谢老师的回复,我还是有点疑问,因为i是(1、2、3、4),那么i-1也就相应的变成了(0、.1、2.、3),这样就等于少循环一次,所以我认为这个room不应该是room(i-1),而应该直接是room(i),不知道我这个理解是不是有问题?

那肯定有问题啊,你把i-1改成i这段代码就执行不了了。我这么跟你解释吧,索引呢就像是新华字典里面的偏旁部首,你可以根据偏旁查找到相关的字,根据索引可以定位到相对应的元素。索引是从0开始的(这是硬性规定),索引=0指向的就是第一个元素,以此类推. . .

fengqing518
学分:53 LV3
2021-12-04
9L

kiku 发表于2021-12-02 10:00

那肯定有问题啊,你把i-1改成i这段代码就执行不了了。我这么跟你解释吧,索引呢就像是新华字典里面的偏旁部首,你可以根据偏旁查找到相关的字,根据索引可以定位到相对应的元素。索引是从0开始的(这是硬性规定),索引=0指向的就是第一个元素,以此类推. . .

谢谢大神,那这么理解就是i是(1、2、3、4),I的索引是(0、1、2、3),i-1是索引的减法,但我还有问题,程序里i-1是怎么判断是索引的减法而不是本身循环的减法呢?

kiku
学分:317 LV5
2021-12-09
10L

fengqing518 发表于2021-12-04 01:55

谢谢大神,那这么理解就是i是(1、2、3、4),I的索引是(0、1、2、3),i-1是索引的减法,但我还有问题,程序里i-1是怎么判断是索引的减法而不是本身循环的减法呢?

不是i的索引,是room这个列表的索引,根据索引可以定位到列表里面的元素,怎么就跟你讲不明白呢。这段代码好像讲的是一个酒店的例子吧,先定义一个空的列表room好比是整个酒店,然后再添加1 2 3 4四个楼层,再向每个楼层添加房间。结合例子很好理解吧,为什么你就绕不出来呢?循环就是循环,没有索引的减法,循环出的索引是什么就是什么,i-1是索引。room.append([])这个没有索引就是向整个room列表追加值,room[i-1].append(i*1000+100+j)而这个有索引则是向room列表里面索引为i-1的这个元素追加值,再不懂我也不想解释了

首页上一页 12 下一页尾页 12 条记录 1/2页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照