Foros del Web » Programando para Internet » Python »

Bucles en Python

Estas en el tema de Bucles en Python en el foro de Python en Foros del Web. Hola, soy nuevo en este lenguaje, he leido varios tutoriales y ayudas para realizar mi primer programa y no he tenido problemas, solo me ha ...
  #1 (permalink)  
Antiguo 14/03/2011, 10:14
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 11 meses
Puntos: 0
Bucles en Python

Hola, soy nuevo en este lenguaje, he leido varios tutoriales y ayudas para realizar mi primer programa y no he tenido problemas, solo me ha surgido uno, a la hora de "traducir" un bucle de mi mentalidad de php a la de python.

¿Como podriamos tener este bucle en python?
Código:
    for($i=0; $i<$count; $i++){ 
        for($j=$count-1; $j>$i; $j=$j-1)
Un saludo!
__________________
Salud y libertad
  #2 (permalink)  
Antiguo 14/03/2011, 13:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Bucles en Python

Puedes hacerlo con whiles:
Código Python:
Ver original
  1. count = 10
  2. i = 0
  3. while i < count:
  4.     j = count-1
  5.     while j > i:
  6.         #do_something()
  7.         j -= 1
  8.     i += 1

O puedes hacerlo con fors.
Código Python:
Ver original
  1. for i in range(count):
  2.     for j in range(count-1, i, -1):
  3.         #do_something()
  #3 (permalink)  
Antiguo 15/03/2011, 03:10
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Bucles en Python

Perfecto!

Muchisimas gracias.
Sólo necesitaba un poco de luz al respecto.

Parece que voy entendiendo como funcionan los bucles...
__________________
Salud y libertad
  #4 (permalink)  
Antiguo 16/03/2011, 10:03
 
Fecha de Ingreso: abril-2010
Ubicación: Manizales
Mensajes: 91
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Bucles en Python

Cita:
Iniciado por razpeitia Ver Mensaje
O puedes hacerlo con fors.
Código Python:
Ver original
  1. for i in range(count):
  2.     for j in range(count-1, i, -1):
  3.         #do_something()

si no te queda claro, (en un principio los for no eran del todo claros para mi), los ciclos lo que hacen es recorrer listas, la función range generará una lista dependiendo de los parámetros y la i y j recorrerán esa lista, como los ciclos foreach en .NET, o los for each en JAVA y ArrayList.
Para entender mejor la función range, puedes encontrar la documentación aqui

Para mejorar el rendimiento de tu aplicación cuando generes listas muy grandes puedes usar la función xrange, la cual hace lo mismo, pero ayuda a ahorrar un poco de memoria
__________________
pensando en Bytecodes
  #5 (permalink)  
Antiguo 16/03/2011, 10:19
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Bucles en Python

El bucle hace exactamente lo que quería.
Y además comprendo su funcionamiento, asi que perfecto.

Respecto a la funcion xrange desconocía su existencia, ya que soy nuevo con este lenguaje. No obstante puede que me sea de mucha ayuda, ya que trabajo con matrices de muchos elementos 50.000 x 50.000. Le echare un vistazo.

Muchas gracias de nuevo.
__________________
Salud y libertad
  #6 (permalink)  
Antiguo 17/03/2011, 04:51
 
Fecha de Ingreso: abril-2010
Ubicación: Manizales
Mensajes: 91
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Bucles en Python

Simplemente la función xrange utiliza un tipo especial de dato, no como el range que genera listas de números normales, lo cual en tu caso, podría tener casos críticos por el volumen de informacion que tienes, (estamos hablando de 2.500.000.000 datos)
__________________
pensando en Bytecodes
  #7 (permalink)  
Antiguo 17/03/2011, 04:59
Avatar de Nietzsche  
Fecha de Ingreso: enero-2005
Ubicación: MALAGA-ESPAÑA
Mensajes: 228
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Bucles en Python

En efecto, acabo de hacer la prueba sustituyendo todas mis funciones range (que trataban con numeros enteros) por funciones xrange y he conseguido un speed up importante!.

Muchas gracias de nuevo.
__________________
Salud y libertad
  #8 (permalink)  
Antiguo 17/03/2011, 08:43
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Bucles en Python

la diferencia es simple: range genera la lista entera antes de devolverla, xrange es un generador: un tipo de funcion que devuelve un valor y puede ser llamada luego para que continúe desde donde se quedó. Ejemplo, xrange con un solo parámetro podría implementarse como:

Código Python:
Ver original
  1. def mi_xrange(tope):
  2.     entero = 0
  3.     while entero < tope:
  4.         yield entero
  5.         entero += 1

http://www.python.org/doc//current/r...ld-expressions


Saludos.

Etiquetas: bucles
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:10.