我正在尝试创建10个房间,其中有随机数量的盒子和苹果。 当我尝试显示它们时,出现以下错误:“ IndexError('列表索引超出范围',)” 另外,我也在寻找处理多个字典并对其进行处理的最佳方法。 这是我的代码:
rooms=[]
for i in range(1,11):
a={'apples':random.randint(0,3),'box':random.randint(0,2)}
rooms.append(dict(a))
for i in range(1,11):
print(rooms[i])
答案 0 :(得分:0)
这在这里不起作用,因为索引在字典列表中从 0 到 9 ,并且您要求在索引 10
将两个range(1,11)
替换为range(10)
,它将起作用。
答案 1 :(得分:0)
问题是您正在使用:
for i in range(1,11)
遍历您的列表。您的房间列表长度为10。但是,您要遍历第11个项目,这当然是不存在的(请记住python使用0索引)
相反,使用:
for i in range(10)
答案 2 :(得分:0)
import random
rooms=[]
for i in range(1,11):
a={'apples':random.randint(0,3),'box':random.randint(0,2)}
rooms.append(dict(a))
for i in range(0,10):
print(rooms[i])
编辑1:当您使用第一个循环for i in range(1,11)
创建会议室列表时,但在会议室列表中,索引从0
开始,因此会议室列表中包含索引{{1}中的项目}至0
。
因此,在将字典附加到列表之后打印列表时,您必须从10
开始索引到列表的长度。
始终检查列表的第一长度以及列表的开始和结束索引,然后开始打印元素 您编写的此方法适用于在某些特定索引上修改现有列表的情况。 因此,在使用列表时要注意建立索引。
答案 3 :(得分:0)
由于rooms
没有任何索引'10',因此显示错误
有一种使用列表理解的更好方法
import random
rooms=[{'apples':random.randint(0,3),'box':random.randint(0,2)} for i in range(10)]
for d in rooms:
print(d)
如果您要创建10个房间,则可以进行range(10)
,而无需range(1, 11)
答案 4 :(得分:0)
要遍历集合中的所有元素,可以使用以下命令:
for room in rooms:
print(room)
当您使用range(...)
进行迭代时,实际上是使用一组数字来做同样的事情。您可以这样认为:
for index in [1,2,3,...11]:
...
第一种方法可以更直接地表达您想要的内容,并且可以避免range语句出现一次性错误。
答案 5 :(得分:0)
for i in range(1,11):
print(rooms[i])
是问题。
Python索引从零开始。
它就像(0
,1
,2
,3
等等)。
所以您必须这样做:
for i in range(10):
print(rooms[i])
或从i
中减去1:
for i in range(1,11):
print(rooms[i-1])
或者只是遍历列表:
for i in rooms:
print(i)