Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/07/2015, 11:23
Koan
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 14 años, 4 meses
Puntos: 9
Respuesta: ¿Cambiar el step de un range o generador en tiempo de ejecución?

Cita:
Iniciado por Carlangueitor Ver Mensaje
¿Probaste hacer eso con un while?

Saludos
Si. Pero no es lo que busco. Supongo que con un while seria algo asi:

Código Python:
Ver original
  1. import random
  2. num = 1
  3. while num <= 25:
  4.     print(num)
  5.     num += random.randint(1, 25)

Código Python:
Ver original
  1. 1
  2. 2
  3. 6
  4. 7
  5. 9
  6. 12
  7. 14
  8. 16
  9. 19
  10. 24

Aunque la duda va a enfocada cuando se trabaja con tuplas o listas. Cuando se trabaja con matrices se puede hacer lo anterior (con un while), ya que llamamos a los vectores por el indice. Pero claro, si las matrices tienen muchos vectores necesita muchos recursos.

Por ejemplo, en este caso:

Código Python:
Ver original
  1. objetos = ('casa', 'lampara', 'mesa', 'armario', 'silla')
  2.  
  3. for enum, x in enumerate(itertools.combinations(objetos, 3), 1):
  4.     print(enum, x)

Y su resultado:

Código Python:
Ver original
  1. 1 ('casa', 'lampara', 'mesa')
  2. 2 ('casa', 'lampara', 'armario')
  3. 3 ('casa', 'lampara', 'silla')
  4. 4 ('casa', 'mesa', 'armario')
  5. 5 ('casa', 'mesa', 'silla')
  6. 6 ('casa', 'armario', 'silla')
  7. 7 ('lampara', 'mesa', 'armario')
  8. 8 ('lampara', 'mesa', 'silla')
  9. 9 ('lampara', 'armario', 'silla')
  10. 10 ('mesa', 'armario', 'silla')

¿Como conseguir, por ejemplo, que de forma aleatoria y respetando la secuencia nos diera...?

Código Python:
Ver original
  1. 1 ('casa', 'lampara', 'mesa')
  2. 5 ('casa', 'mesa', 'silla')
  3. 9 ('lampara', 'armario', 'silla')

Ya digo que esto es un pequeño ejemplo y se puede conseguir facilmente con arreglos. Pero imagina que las combinaciones fueran 1000, 5000 o mas. No es viable tener un arreglo tan grande.

Por otro lado, con arreglo seria asi:

Código Python:
Ver original
  1. objetos = ('casa', 'lampara', 'mesa', 'armario', 'silla')
  2. matriz = []
  3. for enum, x in enumerate(itertools.combinations(objetos, 3), 1):
  4.     matriz.append(x)
  5.     print(enum, x)
  6.    
  7.  
  8. num = 0
  9. while num <= 10:    
  10.     print((matriz[num]))
  11.     num += random.randint(1, 5)

Código Python:
Ver original
  1. ('casa', 'lampara', 'mesa')
  2. ('casa', 'lampara', 'armario')
  3. ('casa', 'lampara', 'silla')
  4. ('casa', 'mesa', 'armario')
  5. ('casa', 'mesa', 'silla')
  6. ('casa', 'armario', 'silla')
  7. ('lampara', 'mesa', 'armario')
  8. ('lampara', 'mesa', 'silla')
  9. ('lampara', 'armario', 'silla')
  10. ('mesa', 'armario', 'silla')
  11. Resultado:
  12. ('casa', 'lampara', 'mesa')
  13. ('casa', 'lampara', 'armario')
  14. ('lampara', 'mesa', 'armario')
  15. ('mesa', 'armario', 'silla')

Lo que trato de hacer, es no tener que crear el arreglo. Osea, que un generador, un while o un for nos devuelda el vector por medio de su indice aleatorio. Pero respetendo la secuencia aleatoria de menor a mayor.

Última edición por Koan; 15/07/2015 a las 11:45