2012-07-06 41 views
52

可能重複:
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://stackoverflow.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

回答

96

負數表示您從右而不是左數起。所以,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

6

列表索引-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://stackoverflow.com/questions/15911115/arrays-and-negative-indexes-in-perl。據我所知,Larry自己爲Perl提出了這個問題,但他可能從其他地方獲得了它。 – 2017-08-30 20:07:55