Python中的“列表索引超出范围”错误

2 投票
6 回答
3149 浏览
提问于 2025-04-17 04:15

我正在制作一个简单的跳棋游戏。为了记录所有棋子可以移动到的位置,我创建了一个列表来存放这些位置。

Locations = [(10, 10), (70, 10), (130, 10), (190, 20), (250, 10), (310, 10), \
         (370, 10), (430, 10), (10, 70), (130, 70), (190, 70), (250, 70), \
         (310, 70), (370, 70), (430, 70), (10, 130), (70, 130), (130, 130), \
         (190, 130), (250, 130), (310, 130), (370, 130), (430, 130), \
         (10, 190), (70, 190), (130, 190), (190, 190), (250, 190), (310, 190), \
         (370, 190), (430, 190)]

但是,当我尝试运行程序时,总是出现这样的错误:Ld8 = Locations[31] - 列表索引超出范围。

所以,我想可能是列表只能包含一定数量的数字。于是,我又创建了一个新的Locations列表,添加了E到H的行,以此来分开列表。但我仍然收到相同的错误,提示索引超出范围。(Ld8是用来存储D行第8列位置的变量)

6 个回答

2

在这个列表中,最大的索引是30,而不是31。大多数编程语言中的列表索引是从零开始的。所以(10,10)在索引0的位置,而(430,190)在索引30的位置。

如果你想在Python中访问列表的最后一个元素,我建议你用Locations[-1]来索引。

如果你想使用len来获取最后一个元素,你需要减去1:Locations[len(Locations) - 1]

3

列表的索引是从0开始的。所以如果你的列表有31个项目,你可以用索引0到30来访问它们。Locations[31]指的是第32个项目,但这个项目并不存在。

6

你有一个非常基础的理解问题:

>>> Locations = [(10, 10), (70, 10), (130, 10), (190, 20), (250, 10), (310, 10), (370, 10), (430, 10), (10, 70), (130, 70), (190, 70), (250, 70), (310, 70), (370, 70), (430, 70), (10, 130), (70, 130), (130, 130), (190, 130), (250, 130), (310, 130), (370, 130), (430, 130), (10, 190), (70, 190), (130, 190), (190, 190), (250, 190), (310, 190), (370, 190), (430, 190)]
>>> len(Locations)
31
>>> Locations[0] # first element
(10, 10)
>>> Locations[30] # last element
(430, 190)
>>> Locations[31] # doesn't exist!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Locations里的元素从0到30,因为总共有31个元素。

撰写回答