Python 字典列表(创建/处理)

Python 字典列表(创建/处理),python,list,dictionary,Python,List,Dictionary,我正在尝试创建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):

我正在尝试创建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])

它在这里不起作用,因为索引在您的dict列表上是从09,您在索引10处请求dict


将两个
范围(1,11)
替换为
范围(10)
,它将起作用。

问题在于您正在使用:

for i in range(1,11)
重复浏览您的列表。您的房间列表长度为10。但是,您希望遍历第11项,这当然不存在(请记住python使用0索引)

相反,请使用:

for i in range(10)
编辑1:当您使用范围(1,11)中的i的第一个循环
创建房间列表时
但房间列表索引从
0开始
,因此房间列表包含从索引
0
10的项目。
因此,在添加dict后打印列表时,您必须开始从
0
到列表长度进行索引

始终检查列表的第一个长度以及列表的起始索引和结束索引,然后开始打印元素 当您修改某些特定索引上的现有列表时,您编写的此方法适用。
所以在使用列表时要注意索引。

它的显示错误,因为
房间
没有任何索引“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)
迭代集合中的所有元素,可以使用以下方法:

for room in rooms:
    print(room)
当您使用
范围(…)
进行迭代时,您对一组数字有效地执行了相同的操作。你可以这样想:

for index in [1,2,3,...11]:
    ...
第一种方法更直接地表达了您想要的内容,并将避免使用range语句出现off by one错误

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)

在python中,列表是零索引的。用
range(10)
替换
range(1,11)
当迭代列表中的内容时,只需对文件室中的项目执行
:打印(项目)
。(这适用于底部循环)
rooms[10]
不存在,因为最后一个索引将是9而不是10。正如其他人所评论的,更改为范围(10)应该可以解决可能重复的代码片段的问题,这可能会提供一些有限的即时帮助。一个恰当的解释将通过描述为什么这是一个很好的问题解决方案来极大地改进its,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设,以便您理解。
for i in rooms:
    print(i)