为什么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
如果列表中没有以前的元素,我想要做的就是抛出一个错误。
在Python中,负列表索引表示从列表右侧开始计算的项目(即l[-n]
是l[len(l)-n]
)的简写。
如果您发现您需要负指数来指示错误,那么您可以简单地检查该情况并自行提出exception(或随时处理):
index = get_some_index() if index < 0: raise IndexError("negative list indices are considered out of range") do_something(l[index])
这是因为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)
问 :为什么l[10]
返回IndexError
,但是l[-1]
返回0
?
答 :因为Python中的索引值(和许多其他语言一样)是从零开始的。 这意味着第一个项目被存储在索引0
。
你的名单
l = [1,2,3,4,5,6,7,8,9,0]
有10个项目。 由于索引从0
开始,最后一个项目将在索引9
。 当你试图在索引10
访问你的列表时,Python正确地抛出一个IndexError
exception来告诉你这不是一个有效的索引值并且是越界的。
Python也使用负索引值的约定来访问列表或序列的“结尾”中的项目。 索引值-1
表示列表中的最后一项, -2
表示倒数第二等。由于列表中的最后一项是0
,这就是l[-1]
返回的结果。
@ Lattyware的答案已经告诉你如何生成/抛出一个exception,我希望这能回答你最初的问题。