elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Función for (python), duda de "novato".
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Función for (python), duda de "novato".  (Leído 1,128 veces)
assw1208

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Función for (python), duda de "novato".
« en: 25 Julio 2020, 19:13 »

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:
Código:
#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
Colaborador
***
Desconectado Desconectado

Mensajes: 1.166


Ver Perfil
Re: Función for (python), duda de "novato".
« Respuesta #1 en: 25 Julio 2020, 19:50 »

Citar
¿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
Código:
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)

Citar
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 Desconectado

Mensajes: 184


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Función for (python), duda de "novato".
« Respuesta #2 en: 25 Julio 2020, 19:54 »

Citar
¿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.
Código:
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:
Código:
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

Código:
#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
Código:
for recorrer in lista:
    lista[Indice] *= 10
    Indice += 1
El bucle para cada elemento ejecutará lo que haya dentro. así que:

Código:
   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
Código:
   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

Citar
¿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

tincopasan


Desconectado Desconectado

Mensajes: 1.193

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Función for (python), duda de "novato".
« Respuesta #3 en: 25 Julio 2020, 21:42 »

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:
Código
  1. lista = [1,2,3,4,5,6,7,8,9]
  2. for recorrer in range(len(lista)):
  3.   lista[recorrer] *= 10
  4. print(lista)
  5.  

y listo!

Edito: más adelante lo harás simplemente así:

Código
  1. lista = [1,2,3,4,5,6,7,8,9]
  2. lista = [lista[valor] * 10 for valor in range(len(lista))]
  3. print(lista)

y como dije la variable indice es innecesaria

Saludos
« Última modificación: 26 Julio 2020, 05:54 por tincopasan » En línea

assw1208

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Función for (python), duda de "novato".
« Respuesta #4 en: 27 Julio 2020, 19:12 »

Porque el For se itera 9 veces (uno por cada elemento de la
Código:
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 Desconectado

Mensajes: 30



Ver Perfil
Re: Función for (python), duda de "novato".
« Respuesta #5 en: 27 Julio 2020, 19:13 »

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.
Código:
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:
Código:
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

Código:
#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
Código:
for recorrer in lista:
    lista[Indice] *= 10
    Indice += 1
El bucle para cada elemento ejecutará lo que haya dentro. así que:

Código:
   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
Código:
   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 :o :o.
En línea

"COURAGE TODAY,
                              VICTORY TOMORROW "

                            ----------------W--------------
assw1208

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Función for (python), duda de "novato".
« Respuesta #6 en: 27 Julio 2020, 19:15 »

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:
Código
  1. lista = [1,2,3,4,5,6,7,8,9]
  2. for recorrer in range(len(lista)):
  3.   lista[recorrer] *= 10
  4. print(lista)
  5.  

y listo!

Edito: más adelante lo harás simplemente así:

Código
  1. lista = [1,2,3,4,5,6,7,8,9]
  2. lista = [lista[valor] * 10 for valor in range(len(lista))]
  3. 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--------------
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines