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行了?
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不是让每行少一个[]吗?
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]就是第一个元素即添加的第一个空列表)。怎么感觉你好像不太懂列表和索引的相关知识
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 发表于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的这个元素追加值,再不懂我也不想解释了