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

3 minutos de lectura

Si tengo esta lista con 10 elementos:

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

¿Por qué voy a[10] devuelve un IndexError, pero l[-1] devuelve 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

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

  • ¿Qué quiere decir con “no hay elementos anteriores en la lista”? Si por “anterior” quiere decir “a la izquierda del elemento actual”, entonces la respuesta de Lattyware debería servir muy bien. Pero no puedo evitar preguntarme si te refieres a otra cosa.

    – Juan Y.

    27 jun.

¿Por que Python devuelve indices de lista negativos
gareth latty

En Python, los índices de lista negativa indican 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 generar 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])

  • No estoy muy seguro de que me guste IndexError, pero al menos ahora tiene un mensaje. Estaría bastante sorprendido si no pudiera obtener el último elemento usando -1 cuando saber es una lista integrada… Además, el corte extendido necesita algo de trabajo…

    –Jon Clements

    27 jun.

  • @JonClements No estoy sugiriendo una subclase, por lo que la lista no comportarse de manera diferente, solo en el caso particular en el que no desea que los índices negativos sean posibles, manéjelo.

    – Gareth Latty

    27 jun.


1641675501 698 ¿Por que Python devuelve indices de lista negativos
Ashwini Chaudhary

Eso es porque l[-1] es igual a l[len(l)-1], 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)

1641675501 584 ¿Por que Python devuelve indices de lista negativos
levon

q: Porque será l[10] devolver un IndexError, pero l[-1] devoluciones 0?

A: Porque los valores de índice en Python (como en muchos otros lenguajes) 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 correctamente lanza un IndexError excepción 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 elementos desde el “final” de una lista o secuencia. Valor de índice -1 indica el ultimo elemento en la lista, -2 penúltimo, etc. Dado que el último elemento de la lista es 0, esto es lo que l[-1] devoluciones.

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 del índice comienza desde 0. En su caso, el último valor del índice es 9, no más valores del índice después del 9. Cuando intenta imprimir los valores más allá del límite del valor del índice, debe arrojar un error.

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad