Autor
|
Tema: Función for (python), duda de "novato". (Leído 5,082 veces)
|
assw1208
Desconectado
Mensajes: 79
|
Aunque llevo cierto tiempo usando python siempre he sido un poco reacio a usar la función for. Ahora siguiendo un curso online he tenido una duda y no encuentro ningún sitio donde se explique "bien" el porque de mi duda. En fin este es el codigo: #Modificar una lista. lista = [1,2,3,4,5,6,7,8,9] Indice = 0 for recorrer in lista: lista[Indice] *= 10 Indice += 1 print(lista)
Se que no es el código más largo ni espectacular pero: ¿Por qué si Indice = 0 todo va bien, pero si Indice = 1, la maquina me devuelve: "lista[Indice] *= 10 IndexError= list idex out of range "? Y otra duda aparte: ¿Por qué es necesario el Indice en "lista[Indice] *= 10"? Se que si lo quitas el programa realmente imprime la lista 10 veces, pero sigo sin entender porque es necesario. En fin se que no me explico muy bien, pero espero que alguien pueda ayudarme. Gracias por todo de antemano .
|
|
|
En línea
|
"COURAGE TODAY, VICTORY TOMORROW "
----------------W--------------
|
|
|
EdePC
|
¿Por qué si Indice = 0 todo va bien, pero si Indice = 1, la maquina me devuelve: "lista[Indice] *= 10 IndexError= list idex out of range "? Porque el For se itera 9 veces (uno por cada elemento de la lista ), así que el índice debe ir desde 0 hasta 8, si pones 1 u otro valor esto hará que este índice llegue a por ejemplo 9 y este índice no existe en la lista (no confundir índice con valor) Y otra duda aparte: ¿Por qué es necesario el Indice en "lista[Indice] *= 10" Primero tienes que entender para que sirve y que hace tu Script (código), en tu caso sirve para mostrar una lista que va del 10 al 90, y lo hace iterando sobre los elementos indexados de una lista pre-existente que va del 1 al 9, esto lo logra reemplazando el valor que ya existe multiplicándolo por 10 y poniendo este resultado en su lugar
|
|
|
En línea
|
|
|
|
Drakaris
Desconectado
Mensajes: 286
Todo lo que puedas imaginar, lo puedes crear.
|
¿Por qué si Indice = 0 todo va bien, pero si Indice = 1, la maquina me devuelve: "lista[Indice] *= 10 IndexError= list idex out of range "?
Porque al final de la lista, el la variable indice tendrá un numero mayor del indice existente. para mostrar un elemento en la lista sería lo siguiente. lista = [1,2,3,4,5,6,7,8,9] lista[0] => output: 1 lista[1] => output: 2 lista[2] => output: 3 lista[3] => output: 4 lista[4] => output: 5 lista[5] => output: 6 lista[6] => output: 7 lista[7] => output: 8 lista[8] => output: 9 lista[9] => IndexError= list idex out of range
Ya que en la posición 9 ya no hay ningun elemento SI la lista fuera: lista = [1,2,3,4,5,6,7,8,9,10] lista[0] => output: 1 lista[1] => output: 2 lista[2] => output: 3 lista[3] => output: 4 lista[4] => output: 5 lista[5] => output: 6 lista[6] => output: 7 lista[7] => output: 8 lista[8] => output: 9 lista[9] => 10
La posicion 9 tendría el valor 10, si ahora en esta lista pones un numero mayor este te saltará el error IndexError= list idex out of range Esto lo tienes claro? Una vez entiendes esto... veamos tu codigo #Modificar una lista. lista = [1,2,3,4,5,6,7,8,9] Indice = 0 for recorrer in lista: lista[Indice] *= 10 Indice += 1 print(lista)
Este crea una lista y en la variable Indice el valor por defecto es 0. Después leemos todos los elementos de la lista con un bucle for for recorrer in lista: lista[Indice] *= 10 Indice += 1
El bucle para cada elemento ejecutará lo que haya dentro. así que: 1º pasada: lista[0] *=10 # output 10 2º pasada: lista[1] *=10 # output 20 3º pasada: lista[2] *=10 # output 30 .... 9º pasada: lista[8] *=10 # output 90 (9*10)
Ahora pongamos la variable Indice como valor 1 por defecto 1º pasada: lista[1] *=10 # output 20 2º pasada: lista[2] *=10 # output 30 3º pasada: lista[3] *=10 # output 40 .... 9º pasada: lista[9] *=10 # output ERROR IndexError= list idex out of range
Y como da un error, ya no puede acabar de ejecutar el script ¿Por qué es necesario el Indice en "lista[Indice] *= 10"?
Porque si no, no estas especificando ningún número para que pueda ejecutar la operacion. Espero que te haya podido resolver tu duda! . Y suerte con tus estudios.
|
|
|
En línea
|
Lo increible, no es lo que ves, sino como es
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
más allá de todo lo que te explicaron, no es necesario usar ese indice si se puede de otra forma provista por el lenguaje: lista = [1,2,3,4,5,6,7,8,9] for recorrer in range(len(lista)): lista[recorrer] *= 10 print(lista)
y listo! Edito: más adelante lo harás simplemente así: lista = [1,2,3,4,5,6,7,8,9] lista = [lista[valor] * 10 for valor in range(len(lista))] print(lista)
y como dije la variable indice es innecesaria Saludos
|
|
« Última modificación: 26 Julio 2020, 05:54 am por tincopasan »
|
En línea
|
|
|
|
assw1208
Desconectado
Mensajes: 79
|
Porque el For se itera 9 veces (uno por cada elemento de la lista ), así que el índice debe ir desde 0 hasta 8, si pones 1 u otro valor esto hará que este índice llegue a por ejemplo 9 y este índice no existe en la lista (no confundir índice con valor) Primero tienes que entender para que sirve y que hace tu Script (código), en tu caso sirve para mostrar una lista que va del 10 al 90, y lo hace iterando sobre los elementos indexados de una lista pre-existente que va del 1 al 9, esto lo logra reemplazando el valor que ya existe multiplicándolo por 10 y poniendo este resultado en su lugar Muchas gracias por la explicación, ahora empiezo a entender esto .
|
|
|
En línea
|
"COURAGE TODAY, VICTORY TOMORROW "
----------------W--------------
|
|
|
assw1208
Desconectado
Mensajes: 79
|
Porque al final de la lista, el la variable indice tendrá un numero mayor del indice existente. para mostrar un elemento en la lista sería lo siguiente. lista = [1,2,3,4,5,6,7,8,9] lista[0] => output: 1 lista[1] => output: 2 lista[2] => output: 3 lista[3] => output: 4 lista[4] => output: 5 lista[5] => output: 6 lista[6] => output: 7 lista[7] => output: 8 lista[8] => output: 9 lista[9] => IndexError= list idex out of range
Ya que en la posición 9 ya no hay ningun elemento SI la lista fuera: lista = [1,2,3,4,5,6,7,8,9,10] lista[0] => output: 1 lista[1] => output: 2 lista[2] => output: 3 lista[3] => output: 4 lista[4] => output: 5 lista[5] => output: 6 lista[6] => output: 7 lista[7] => output: 8 lista[8] => output: 9 lista[9] => 10
La posicion 9 tendría el valor 10, si ahora en esta lista pones un numero mayor este te saltará el error IndexError= list idex out of range Esto lo tienes claro? Una vez entiendes esto... veamos tu codigo #Modificar una lista. lista = [1,2,3,4,5,6,7,8,9] Indice = 0 for recorrer in lista: lista[Indice] *= 10 Indice += 1 print(lista)
Este crea una lista y en la variable Indice el valor por defecto es 0. Después leemos todos los elementos de la lista con un bucle for for recorrer in lista: lista[Indice] *= 10 Indice += 1
El bucle para cada elemento ejecutará lo que haya dentro. así que: 1º pasada: lista[0] *=10 # output 10 2º pasada: lista[1] *=10 # output 20 3º pasada: lista[2] *=10 # output 30 .... 9º pasada: lista[8] *=10 # output 90 (9*10)
Ahora pongamos la variable Indice como valor 1 por defecto 1º pasada: lista[1] *=10 # output 20 2º pasada: lista[2] *=10 # output 30 3º pasada: lista[3] *=10 # output 40 .... 9º pasada: lista[9] *=10 # output ERROR IndexError= list idex out of range
Y como da un error, ya no puede acabar de ejecutar el script Porque si no, no estas especificando ningún número para que pueda ejecutar la operacion. Espero que te haya podido resolver tu duda! . Y suerte con tus estudios. Muchas gracias por la explicación no me esperaba algo así tan detallado .
|
|
|
En línea
|
"COURAGE TODAY, VICTORY TOMORROW "
----------------W--------------
|
|
|
assw1208
Desconectado
Mensajes: 79
|
más allá de todo lo que te explicaron, no es necesario usar ese indice si se puede de otra forma provista por el lenguaje: lista = [1,2,3,4,5,6,7,8,9] for recorrer in range(len(lista)): lista[recorrer] *= 10 print(lista)
y listo! Edito: más adelante lo harás simplemente así: lista = [1,2,3,4,5,6,7,8,9] lista = [lista[valor] * 10 for valor in range(len(lista))] print(lista)
y como dije la variable indice es innecesaria Saludos Woow vaya locura de acortación de código, lo intentare poner en practica.
|
|
|
En línea
|
"COURAGE TODAY, VICTORY TOMORROW "
----------------W--------------
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
|
Dark4ngel
|
7
|
13,153
|
3 Noviembre 2011, 10:42 am
por Dark4ngel
|
|
|
Duda funcion "SYSTEM", ¿porque funciona con unos comandos y con otros no?
Programación C/C++
|
BlerofonT
|
8
|
17,089
|
10 Julio 2012, 12:09 pm
por HdM
|
|
|
[Duda] Como trabajar una variable en una función cuyos parametros son "Elipsis"
Programación C/C++
|
Zodiak98
|
1
|
2,811
|
10 Julio 2013, 03:15 am
por rir3760
|
|
|
[Python] Lista vacía "None" generada a partir de otra extendida... Gran duda.
Scripting
|
EzianGES
|
5
|
3,250
|
21 Febrero 2014, 21:31 pm
por EzianGES
|
|
|
Duda "existencial" para novato - RUBY
« 1 2 »
Dudas Generales
|
joseluis84
|
16
|
5,503
|
16 Septiembre 2015, 18:36 pm
por joseluis84
|
|