¿Por qué Python devuelve índices de lista negativos?

Si tengo esta lista con 10 elementos:

>>> l = [1,2,3,4,5,6,7,8,9,0] 

¿Por qué l [10] devolverá un IndexError, pero l [-1] devuelve 0?

 >>> l[10] Traceback (most recent call last): File "", line 1, in  IndexError: list index out of range >>> l[0] 1 >>> l[-1] 0 >>> l[-2] 9 

Lo que quiero hacer es lanzar un error si no hay elementos anteriores en la lista.

En Python, los índices de lista negativa indican los elementos contados desde la derecha de la lista (es decir, l[-n] es una abreviatura de l[len(l)-n] ).

Si encuentra que necesita índices negativos para indicar un error, simplemente puede verificar ese caso y plantear la excepción usted mismo (o manejarlo en ese momento):

 index = get_some_index() if index < 0: raise IndexError("negative list indices are considered out of range") do_something(l[index]) 

Es porque l[-1] es igual a l[len(l)-1] , de manera similar l[-2] es igual a 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) 

P : ¿Por qué l[10] devolverá un IndexError , pero l[-1] devuelve 0 ?

R : Porque los valores de índice en Python (como en muchos otros idiomas) están basados ​​en cero. Eso significa que el primer elemento se almacena en el índice 0 .

Tu lista

 l = [1,2,3,4,5,6,7,8,9,0] 

tiene 10 artículos. Dado que el índice comienza en 0 , el último elemento estará en el índice 9 . Cuando intenta acceder a su lista en el índice 10 , Python lanza correctamente una excepción IndexError para decirle que este no es un valor de índice válido y está fuera de los límites.

Python también usa la convención de valores de índice negativos para acceder a los elementos desde el “final” de una lista o secuencia. El valor de índice -1 indica el último elemento de la lista, -2 el siguiente al último, etc. Dado que el último elemento de su lista es 0 , esto es lo que devuelve l[-1] .

La respuesta de @ Lattyware ya le muestra cómo generar / lanzar una excepción, espero que esto responda a su pregunta inicial.

Porque, el valor de índice comienza desde 0. En su caso, el último valor de índice es 9, no hay más valor de índice después de 9. Cuando intenta imprimir los valores más allá del límite del valor de índice, debe arrojar un error