为什么Python返回负列表索引?
如果我有10个元素的列表:为什么Python返回负列表索引?,python,Python,如果我有10个元素的列表: >>> l = [1,2,3,4,5,6,7,8,9,0] 为什么l[10]返回索引器,而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,2,3,4,5,6,7,8,9,0]
为什么l[10]返回索引器,而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
>>l[10]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
索引器:列表索引超出范围
>>>l[0]
1.
>>>l[-1]
0
>>>l[-2]
9
如果列表中没有以前的元素,我想做的是抛出一个错误。在Python中,负列表索引表示从列表右侧开始计数的项目(也就是说,
l[-n]
是l[len(l)-n]
的缩写)
如果您发现需要负索引来指示错误,那么您可以简单地检查该情况并自行引发异常(或当场处理):
index=get\u some\u index()
如果指数<0:
提升索引器(“负面列表索引被认为超出范围”)
做点什么(l[索引])
这是因为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)
Q:为什么l[10]
会返回索引器
,而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
表示列表中的最后一项,-2
表示最后一项的下一项等。由于列表中的最后一项是0
,这就是l[-1]
返回的内容
@Lattyware的答案已经向您展示了如何生成/抛出异常,我希望这能回答您最初的问题。因为,索引值从0开始。在您的例子中,最后一个索引值是9,9之后不再有索引值。当您尝试打印超出索引值限制的值时,它必须抛出一个错误不太确定我是否喜欢索引器-但至少现在它有一条消息。如果我知道最后一个元素是一个内置列表,但我不能使用-1得到它,我会非常惊讶…加上扩展切片需要一些工作…@JonClements我不是建议使用子类,所以列表不会有不同的行为,只是在不希望负索引成为可能的特定情况下,处理它。你说“列表中没有以前的元素”是什么意思?如果“previous”的意思是“在当前元素的左边”,那么Lattyware的答案应该很好。但我忍不住想知道你是不是还有别的意思。
l = [1,2,3,4,5,6,7,8,9,0]