variable usar randint numeros numero metodos letras imprimir generar funciones enteros como aleatorios aleatorio aleatoria python random for-loop

usar - iteración aleatoria en Python



random letras python (5)

Demostración de los generadores de Python y el shuffle de Fisher-Yates .

import random def shuffled(sequence): deck = list(sequence) while len(deck): i = random.randint(0, len(deck) - 1) # choose random card card = deck[i] # take the card deck[i] = deck[-1] # put top card in its place deck.pop() # remove top card yield card

Solo generas tantos números aleatorios como uses. Pero, honestamente, es probable que no random.shuffle mucho, por lo que normalmente debería usar random.shuffle .

Nota: Si se elige la carta superior, deck[i] = deck.pop() no sería seguro, por lo que quitar la tapa se realiza en dos pasos.

Cuando quieras iterar secuencialmente sobre una lista de números, escribirás:

for i in range(1000): # do something with i

¿Pero qué sucede si desea iterar sobre la lista de números del rango (0..999) al azar? Hay una necesidad (en cada iteración) de elegir aleatoriamente el número que no se eligió en cualquier iteración anterior y hay una necesidad de iterar sobre todos los números del rango (0..999).

¿Sabes cómo hacer eso (inteligente)?


Hay una función random.permutation() en numpy que hace exactamente eso por ti. Tu código se vería como

from numpy.random import permutation for i in permutation(1000): # do something with i


Las personas a menudo pierden oportunidades de modularización. Puede definir una función para encapsular la idea de "iterar aleatoriamente":

def randomly(seq): shuffled = list(seq) random.shuffle(shuffled) return iter(shuffled)

entonces:

for i in randomly(range(1000)): #.. we''re good to go ..


Puede usar random.shuffle() para, bueno, barajar una lista:

import random r = list(range(1000)) random.shuffle(r) for i in r: # do something with i

Por cierto, en muchos casos en los que usarías un bucle for sobre un rango de enteros en otros lenguajes de programación, puedes describir directamente la "cosa" que quieres iterar en Python.
Por ejemplo, si desea utilizar los valores de i para acceder a los elementos de una lista, debería barajar la lista directamente:

lst = [1970, 1991, 2012] random.shuffle(lst) for x in lst: print x

NOTA: Debe tener en cuenta la siguiente advertencia cuando use random.shuffle() (tomado de la random.shuffle() :

Tenga en cuenta que incluso para len (x) bastante pequeño, el número total de permutaciones de x es mayor que el período de la mayoría de los generadores de números aleatorios; esto implica que la mayoría de las permutaciones de una secuencia larga nunca se pueden generar.


Utilice el método random.shuffle:

itrange = list(range(100)) random.shuffle(itrange) for i in itrange: print i