¿Por qué obtengo un IndexError (o TypeError, o simplemente resultados incorrectos) de "ar[i]" dentro de "for i in ar"?
Estoy intentando sumar los valores de una lista usando un for
bucle. Este es mi código:
def sumAnArray(ar):
theSum = 0
for i in ar:
theSum = theSum + ar[i]
return theSum
Obtuve el siguiente error:
line 13, theSum = theSum + ar[i]
IndexError: list index out of range
Descubrí que lo que estoy tratando de hacer es aparentemente tan simple como sum(ar)
. Pero quiero entender: ¿por qué recibo esto IndexError
y cómo debo escribir el for
bucle? ¿Cómo funciona realmente el bucle?
Para obtener una descripción técnica de cómo Python implementa for
los bucles y el protocolo iterador, consulte, por ejemplo, ¿Cómo funciona un bucle for de Python con iterable? .
Al recorrer una lista, la for
variable (en este ejemplo i
) representa el elemento actual de la lista .
Por ejemplo, dado ar = [1, 5, 10]
, i
tendrá los valores sucesivos 1
y cada vez a través del bucle. Dado que la longitud de la lista es 3, el índice máximo permitido es 2. Por lo tanto, la segunda vez que se realiza el ciclo, cuando se genera an .5
10
i == 5
IndexError
El código debería ser así:
for i in ar:
theSum = theSum + i
Para poder indexar en la lista, use a range
en lugar de iterar directamente sobre la lista:
for i in range(len(ar)):
theSum = theSum + ar[i]
De esta manera, i
naturalmente toma todos los valores de índice válidos para ar
.
El bucle for itera sobre los elementos de la matriz, no sobre sus índices .
Considere, por ejemplo, una lista : ar = [2, 4, 6]
cuando se ejecuta un bucle como este for i in ar:
, los valores sucesivos de i
serán 2
y . La primera vez que se realiza el ciclo funcionaría (ya que la última posición de la lista es 2, es igual a 6), pero la siguiente iteración fallaría (ya que no es válida).4
6
ar[i]
a[2]
a[4]
Intente usar for index, value in enumerate(ar):
, para obtener índices junto con los valores ; entonces theSum = theSum + ar[index]
debería funcionar bien.