否定列表索引?

问题描述:

可能重复:
Explain slice notation否定列表索引?

我试图理解下面的一段代码:

# node list 
n = [] 
for i in xrange(1, numnodes + 1): 
    tmp = session.newobject(); 
    n.append(tmp) 
link(n[0], n[-1]) 

具体来说,我不明白什么是指数-1指的是。如果索引0引用了第一个元素,那么-1是指什么?

+2

我认为这个问题最终涵盖了与[Python Primer for Python Slice Notation]相同的基础(http://*.com/questions/509211/good-primer-for-python-slice-notation) – Daenyth 2012-07-06 18:43:04

+0

I认为这是正确的..谢谢! – Dawood 2012-07-06 18:44:04

负数表示您从右而不是左数起。所以,list[-1]指的是最后一个元素,list[-2]是倒数第二个,依此类推。

+7

但是,有一个警告:如果您尝试切片符号,行为会稍有不同。如果在这种情况下使用-1,则返回最后一个元素。 >>> a = [1,2,3,4,5] >>> a [-1] >>> a [: - 1] [1,2,3,4] – abought 2012-07-06 20:18:45

+5

@ abought虽然这不正常吗?如果我说'a [4]',它会返回5,但'a [:4]'返回[1,2,3,4] – yesennes 2017-05-18 13:34:24

列表索引-x表示从列表末尾开始的第x个项目,因此n[-1]表示列表n中的最后一个项目。任何好的Python教程都应该告诉你这一点。

这是一个不寻常的约定,Python以外的其他语言已经采用,但它非常有用;在任何其他语言中,您将花费大量时间编写n[n.length-1]来访问列表的最后一项。

+1

虽然并非所有语言都能遵循此设计,在C中,'n [-1]'实际上意味着'n [0]之前的元素',如果n指向一个数组 - 即使它更通常是一个错误也没有问题。 [http://dlang.org/d-array-article.html](在D中进行切片)是一种有趣的以母语编写的内存安全切片,包括从右边的符号。 – 2014-09-11 18:15:18

+0

Python直接从Perl获得此功能:https://*.com/questions/15911115/arrays-and-negative-indexes-in-perl。据我所知,Larry自己为Perl提出了这个问题,但他可能从其他地方获得了它。 – 2017-08-30 20:07:55