如果我有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
如果列表中没有先前的元素,我想要做的就是抛出错误。
答案 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.之后没有更多的索引值。当你尝试打印超出索引值限制的值时,它必须抛出错误