Solo una nota, estos son números pseudoaleatorios y no son criptográficamente seguros. No uses esto en ningún caso en el que no quieras que un atacante adivine tus números. Use el secretsmódulo para obtener mejores números aleatorios. Referencia: docs.python.org/3/library/random.html
467
import randomprint(random.randint(0,9))
random.randint(a, b)
Devuelve un entero aleatorio N tal que a <= N <= b.
En las versiones más recientes de Python, el límite superior parece ser exclusivo (es decir randint(0,9), nunca devolverá 9). Esto no se refleja en la documentación en línea, pero está en la ayuda integrada.
Yly
134
Prueba esto:
from random import randrange, uniform# randrange gives you an integral value
irand = randrange(0,10)# uniform gives you a floating-point value
frand = uniform(0,10)
Esto mejoraría la respuesta y debería agregarse. Las respuestas más preocupadas por la seguridad siempre deben agregarse si están disponibles.
SudoKid
31
Elija el tamaño de la matriz (en este ejemplo, he elegido que el tamaño sea 20). Y luego, usa lo siguiente:
import numpy as np
np.random.randint(10, size=(1,20))
Puede esperar ver una salida de la siguiente forma ( se devolverán enteros aleatorios diferentes cada vez que lo ejecute; por lo tanto, puede esperar que los enteros en la matriz de salida difieran del ejemplo que se muestra a continuación ).
También es útil saber cómo Numpy puede generar una matriz aleatoria de tamaño específico, no solo un número aleatorio. (Documentos: numpy.random.randint )
jkdev
28
Prueba esto a través de random.shuffle
>>>import random
>>> nums = range(10)>>> random.shuffle(nums)>>> nums
[6,3,5,4,0,1,2,9,8,7]
En el caso de números continuos randinto randrangeson probablemente las mejores opciones, pero si tiene varios valores distintos en una secuencia (es decir, a list) también podría usar choice:
>>>import random
>>> values = list(range(10))>>> random.choice(values)5
choice También funciona para un elemento de una muestra no continua:
¿Qué pasa si queremos más números de la secuencia?
Gunjan naik
Si deben ser sin reemplazo: random.sample. Con el reemplazo, puede usar una comprensión con choice: por ejemplo, para una lista que contiene 3 valores aleatorios con reemplazo:[choice(values) for _ in range(3)]
MSeifert
18
Mientras que muchos puestos demuestran cómo conseguir un número entero aleatorio, la pregunta original se pregunta cómo generar entero aleatorio s (plural):
¿Cómo puedo generar enteros aleatorios entre 0 y 9 (inclusive) en Python?
Para mayor claridad, aquí demostramos cómo obtener múltiples enteros aleatorios.
Dado
>>>import random
lo =0
hi =10
size =5
Código
Múltiples enteros aleatorios
# A>>>[lo + int(random.random()*(hi - lo))for _ in range(size)][5,6,1,3,0]
# B>>>[random.randint(lo, hi)for _ in range(size)][9,7,0,7,3]
# C>>>[random.randrange(lo, hi)for _ in range(size)][8,3,6,8,7]
# D>>> lst = list(range(lo, hi))>>> random.shuffle(lst)>>>[lst[i]for i in range(size)][6,8,2,5,1]
# E>>>[random.choice(range(lo, hi))for _ in range(size)][2,1,6,9,5]
1 A saber, @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth menciona que este módulo muestra un número entero. 3 Demostrado por @Siddharth Satpathy
Si. Gracias por el enlace. Pero tenía la intención de decir que podría haber mejorado su respuesta al proporcionar detalles antes de simplemente citar dos líneas de código; por qué razón alguien preferiría usarlo en lugar de algo ya incorporado. No es que esté obligado a hacerlo, de todos modos.
Simón
9
>>>import random
>>> random.randrange(10)3>>> random.randrange(10)1
Para obtener una lista de diez muestras:
>>>[random.randrange(10)for x in range(10)][9,0,4,0,5,7,4,3,6,8]
Desde la página de documentación para el módulo aleatorio :
Advertencia: los generadores pseudoaleatorios de este módulo no deben utilizarse con fines de seguridad. Use os.urandom () o SystemRandom si necesita un generador de números pseudoaleatorio criptográficamente seguro.
random.SystemRandom , que se introdujo en Python 2.4, se considera criptográficamente seguro . Todavía está disponible en Python 3.7.1, que es actual en el momento de la escritura.
En lugar de string.digits, rangepodría usarse según algunas de las otras respuestas, tal vez con una comprensión. Mezcla y combina de acuerdo a tus necesidades.
OpenTURNS permite no solo simular los enteros aleatorios sino también definir la distribución asociada con la UserDefinedclase definida.
Lo siguiente simula 12 resultados de la distribución.
import openturns as ot
points =[[i]for i in range(10)]
distribution = ot.UserDefined(points)# By default, with equal weights.for i in range(12):
x = distribution.getRealization()print(i,x)
Simplemente agregue caracteres como 'ABCD' y 'abcd' o '^! ~ = -> <' para alterar el conjunto de caracteres para extraer, cambie el rango para alterar el número de caracteres generados.
Respuestas:
Tratar:
Más información: http://docs.python.org/library/random.html#random.randrange
fuente
secrets
módulo para obtener mejores números aleatorios. Referencia: docs.python.org/3/library/random.htmlDevuelve un entero aleatorio N tal que a <= N <= b.
Documentos: https://docs.python.org/3.1/library/random.html#random.randint
fuente
randint(0,9)
, nunca devolverá 9). Esto no se refleja en la documentación en línea, pero está en la ayuda integrada.Prueba esto:
fuente
Esto genera 10 enteros pseudoaleatorios en el rango de 0 a 9 inclusive.
fuente
El
secrets
módulo es nuevo en Python 3.6. Esto es mejor que elrandom
módulo para criptografía o usos de seguridad.Para imprimir aleatoriamente un número entero en el rango inclusivo 0-9:
Para más detalles, ver PEP 506 .
fuente
Elija el tamaño de la matriz (en este ejemplo, he elegido que el tamaño sea 20). Y luego, usa lo siguiente:
Puede esperar ver una salida de la siguiente forma ( se devolverán enteros aleatorios diferentes cada vez que lo ejecute; por lo tanto, puede esperar que los enteros en la matriz de salida difieran del ejemplo que se muestra a continuación ).
fuente
Prueba esto a través de
random.shuffle
fuente
Intentaría uno de los siguientes:
1.> numpy.random.randint
2.> numpy.random.uniform
3.> random.randrange
4.> random.randint
Velocidad:
► np.random.randint es el más rápido , seguido de np.random.uniform y random.randrange . random.randint es el más lento .
► Tanto np.random.randint como np.random.uniform son mucho más rápidos (~ 8 - 12 veces más rápidos) que random.randrange y random.randint .
Notas:
fuente
%timeit
funciona en su entorno?En el caso de números continuos
randint
orandrange
son probablemente las mejores opciones, pero si tiene varios valores distintos en una secuencia (es decir, alist
) también podría usarchoice
:choice
También funciona para un elemento de una muestra no continua:Si lo necesita "criptográficamente fuerte" también hay un
secrets.choice
python 3.6 y más reciente:fuente
random.sample
. Con el reemplazo, puede usar una comprensión conchoice
: por ejemplo, para una lista que contiene 3 valores aleatorios con reemplazo:[choice(values) for _ in range(3)]
Mientras que muchos puestos demuestran cómo conseguir un número entero aleatorio, la pregunta original se pregunta cómo generar entero aleatorio s (plural):
Para mayor claridad, aquí demostramos cómo obtener múltiples enteros aleatorios.
Dado
Código
Múltiples enteros aleatorios
Muestra de enteros aleatorios
Detalles
Algunas publicaciones demuestran cómo generar nativamente múltiples enteros aleatorios. 1 Aquí hay algunas opciones que abordan la pregunta implícita:
random.random
devuelve un flotante aleatorio en el rango[0.0, 1.0)
random.randint
devuelve un entero aleatorioN
tal quea <= N <= b
random.randrange
alias arandint(a, b+1)
random.shuffle
baraja una secuencia en su lugarrandom.choice
devuelve un elemento aleatorio de la secuencia no vacíarandom.choices
devuelvek
selecciones de una población (con reemplazo, Python 3.6+)random.sample
devuelvek
selecciones únicas de una población (sin reemplazo): 2Vea también la charla de R. Hettinger sobre Chunking and Aliasing usando ejemplos del
random
módulo.Aquí hay una comparación de algunas funciones aleatorias en la Biblioteca estándar y Numpy:
También puede convertir rápidamente una de las muchas distribuciones en Numpy en una muestra de enteros aleatorios. 3
Ejemplos
1 A saber, @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth menciona que este módulo muestra un número entero. 3 Demostrado por @Siddharth Satpathy
fuente
si quieres usar numpy, usa lo siguiente:
fuente
Para obtener una lista de diez muestras:
fuente
Generando enteros aleatorios entre 0 y 9.
Salida:
fuente
random.sample
es otro que se puede usarfuente
La mejor manera es usar la función Importar al azar
o sin ninguna importación de biblioteca:
aquí los popitems eliminan y devuelven un valor arbitrario del diccionario
n
.fuente
Este es más un enfoque matemático, pero funciona el 100% del tiempo:
Digamos que desea utilizar la
random.random()
función para generar un número entrea
yb
. Para lograr esto, solo haga lo siguiente:num = (b-a)*random.random() + a;
Por supuesto, puedes generar más números.
fuente
Desde la página de documentación para el módulo aleatorio :
random.SystemRandom , que se introdujo en Python 2.4, se considera criptográficamente seguro . Todavía está disponible en Python 3.7.1, que es actual en el momento de la escritura.
En lugar de
string.digits
,range
podría usarse según algunas de las otras respuestas, tal vez con una comprensión. Mezcla y combina de acuerdo a tus necesidades.fuente
OpenTURNS permite no solo simular los enteros aleatorios sino también definir la distribución asociada con la
UserDefined
clase definida.Lo siguiente simula 12 resultados de la distribución.
Esto imprime:
Los corchetes están ahí porque
x
es unPoint
en 1 dimensión. Sería más fácil generar los 12 resultados en una sola llamada agetSample
:produciría:
Más detalles sobre este tema están aquí: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
fuente
Tuve mejor suerte con esto para Python 3.6
Simplemente agregue caracteres como 'ABCD' y 'abcd' o '^! ~ = -> <' para alterar el conjunto de caracteres para extraer, cambie el rango para alterar el número de caracteres generados.
fuente