为什么Python返回负列表索引?

时间:2012-06-27 21:42:09

标签: python

如果我有10个元素的列表:

>>> l = [1,2,3,4,5,6,7,8,9,0]

为什么l [10]会返回一个IndexError,但l [-1]会返回0?

>>> l[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[0]
1
>>> l[-1]
0
>>> l[-2]
9

如果列表中没有先前的元素,我想要做的就是抛出错误。

4 个答案:

答案 0 :(得分:19)

在Python中,否定列表索引表示从列表右侧开始计算的项目(即l[-n]l[len(l)-n]的简写)。

如果您发现需要负指数来表示错误,那么您可以直接检查该情况并自行提出异常(或者随后处理它):

index = get_some_index()
if index < 0:
    raise IndexError("negative list indices are considered out of range")
do_something(l[index])

答案 1 :(得分:2)

这是因为l[-1]等于l[len(l)-1], 同样l[-2]等于l[len(l)-2]

>>> lis=[1,2,3,4,5]
>>> lis[-1],lis[-2],lis[-3]
(5, 4, 3)
>>> lis[len(lis)-1],lis[len(lis)-2],lis[len(lis)-3]
(5, 4, 3)

答案 2 :(得分:1)

:为什么l[10]会返回IndexError,但l[-1]会返回0

A :因为Python中的索引值(与许多其他语言一样)是从零开始的。这意味着第一个项目存储在索引0

您的清单

l = [1,2,3,4,5,6,7,8,9,0]

有10个项目。由于索引从0开始,因此最后一项将位于索引9。当您尝试在索引10访问列表时,Python正确地抛出IndexError异常,告诉您这不是有效的索引值并且超出范围。

Python还使用负索引值的约定来访问列表或序列的“结尾”中的项。索引值-1表示列表中的 last 项,-2倒数第二个等等。由于列表中的最后一项是0,是l[-1]返回的内容。

@ Lattyware的答案已经向您展示了如何生成/抛出异常,我希望这可以回答您的初始问题。

答案 3 :(得分:0)

因为,索引值从0开始。在你的情况下,最后一个索引值为9,在9.之后没有更多的索引值。当你尝试打印超出索引值限制的值时,它必须抛出错误