2012-07-06 16 views
52

Duplicar posible:
Explain slice notation¿Índice de lista negativa?

Estoy tratando de comprender el siguiente fragmento de código:

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

En concreto, no entiendo lo que el índice de -1 se refiere a. Si el índice 0 se refiere al primer elemento, ¿a qué se refiere -1?

+2

Creo que esta pregunta cubre el mismo fundamento al final que [Good Primer for Python Slice Notation] (http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation) – Daenyth

+0

I creo que es correcto ... ¡gracias! – Dawood

Respuesta

96

Los números negativos significan que cuenta desde la derecha en lugar de desde la izquierda. Por lo tanto, list[-1] se refiere al último elemento, list[-2] es la penúltima, y ​​así sucesivamente.

+7

Sin embargo, hay una advertencia: el comportamiento es ligeramente diferente si prueba la notación de división. Si usa -1 en ese caso, devuelve un elemento de la última. >>> a = [1,2,3,4,5] >>> a [-1] >>> a [: - 1] [1, 2, 3, 4] – abought

+5

@ Sin embargo, ¿no es ese comportamiento normal? Si dije 'a [4]', devolvería 5, pero 'a [: 4]' devuelve [1,2,3,4] – yesennes

6

Los índices de lista de -x significan el elemento xth del final de la lista, por lo que n[-1] significa el último elemento de la lista n. Cualquier buen tutorial de Python debería haberte dicho esto.

Es una convención inusual que pocos lenguajes distintos de Python han adoptado, pero es extraordinariamente útil; en cualquier otro idioma pasará mucho tiempo escribiendo n[n.length-1] para acceder al último elemento de una lista.

+1

Es cierto, aunque no todos los idiomas pueden seguir este diseño. En C, 'n [-1]' significa literalmente el elemento anterior a 'n [0]' y está bien si n apunta a una matriz, incluso si normalmente se trata de un error. [http://dlang.org/d-array-article.html](Slicing in D) es una versión interesante de la segmentación segura de la memoria en un idioma nativo, incluida la notación correcta. –

+0

Python obtuvo esta característica directamente de Perl: https://stackoverflow.com/questions/15911115/arrays-and-negative-indexes-in-perl. Por lo que yo sé, Larry lo inventó él mismo para Perl, pero podría haberlo obtenido de otro lado. –

Cuestiones relacionadas