Juste une note, ce sont des nombres pseudo-aléatoires et ils ne sont pas sécurisés cryptographiquement. Ne l'utilisez pas dans les cas où vous ne voulez pas qu'un attaquant devine vos chiffres. Utilisez le secretsmodule pour de meilleurs nombres aléatoires. Référence: docs.python.org/3/library/random.html
467
import randomprint(random.randint(0,9))
random.randint(a, b)
Renvoie un entier aléatoire N tel que a <= N <= b.
Dans les nouvelles versions de Python, la limite supérieure semble être exclusive (c'est randint(0,9)-à- dire qu'elle ne renverra jamais 9). Cela n'est pas reflété dans la documentation en ligne, mais c'est dans l'aide intégrée.
Yly
134
Essaye ça:
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)
Cela améliorerait la réponse et devrait être ajouté. Les réponses plus axées sur la sécurité doivent toujours être ajoutées si elles sont disponibles.
SudoKid
31
Choisissez la taille du tableau (dans cet exemple, j'ai choisi la taille 20). Et puis, utilisez ce qui suit:
import numpy as np
np.random.randint(10, size=(1,20))
Vous pouvez vous attendre à voir une sortie de la forme suivante ( différents entiers aléatoires seront retournés chaque fois que vous l'exécuterez; par conséquent, vous pouvez vous attendre à ce que les entiers dans le tableau de sortie diffèrent de l'exemple donné ci-dessous ).
Il est également utile de savoir comment Numpy peut générer un tableau aléatoire de taille spécifiée, pas seulement un nombre aléatoire unique. (Docs: numpy.random.randint )
Comment ça %timeitmarche dans votre environnement?
Cadoiz
18
En cas de nombres continus randintou randrangesont probablement les meilleurs choix, mais si vous avez plusieurs valeurs distinctes dans une séquence (c'est-à-dire a list), vous pouvez également utiliser choice:
>>>import random
>>> values = list(range(10))>>> random.choice(values)5
choice fonctionne également pour un élément d'un échantillon non continu:
Et si nous voulons plus de nombres de la séquence?
Gunjan naik
Si elles doivent être sans remplacement: random.sample. Avec le remplacement, vous pouvez utiliser une compréhension avec choice: par exemple pour une liste contenant 3 valeurs aléatoires avec remplacement:[choice(values) for _ in range(3)]
MSeifert
18
Alors que de nombreux articles montrent comment obtenir un entier aléatoire, la question d'origine demande comment générer un entier aléatoire s (pluriel):
Comment puis-je générer des entiers aléatoires entre 0 et 9 (inclus) en Python?
Pour plus de clarté, nous montrons ici comment obtenir plusieurs entiers aléatoires.
Donné
>>>import random
lo =0
hi =10
size =5
Code
Entiers aléatoires multiples
# 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 À savoir @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth mentionne ce module affichant un entier. 3 Démontré par @Siddharth Satpathy
Ouais. Merci pour le lien. Mais je voulais dire que vous auriez pu améliorer votre réponse en fournissant des détails avant de citer simplement deux lignes de code; comme pour quelle raison quelqu'un préférerait-il l'utiliser plutôt que quelque chose de déjà intégré. Pas que vous y soyez obligé, de toute façon.
Simón
9
>>>import random
>>> random.randrange(10)3>>> random.randrange(10)1
Pour obtenir une liste de dix échantillons:
>>>[random.randrange(10)for x in range(10)][9,0,4,0,5,7,4,3,6,8]
Depuis la page de documentation du module aléatoire :
Avertissement: Les générateurs pseudo-aléatoires de ce module ne doivent pas être utilisés à des fins de sécurité. Utilisez os.urandom () ou SystemRandom si vous avez besoin d'un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé.
random.SystemRandom , qui a été introduit dans Python 2.4, est considéré comme cryptographiquement sécurisé . Il est toujours disponible dans Python 3.7.1 qui est à jour au moment de l'écriture.
Au lieu de string.digits, rangepourrait être utilisé par certaines des autres réponses avec peut-être une compréhension. Mélangez et assortissez selon vos besoins.
OpenTURNS permet non seulement de simuler les entiers aléatoires mais également de définir la distribution associée à la UserDefinedclasse définie.
Ce qui suit simule 12 résultats de la distribution.
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)
Ajoutez simplement des caractères comme 'ABCD' et 'abcd' ou '^! ~ = -> <' pour modifier le pool de caractères à partir duquel vous souhaitez modifier, changez la plage pour modifier le nombre de caractères générés.
Réponses:
Essayer:
Plus d'informations: http://docs.python.org/library/random.html#random.randrange
la source
secrets
module pour de meilleurs nombres aléatoires. Référence: docs.python.org/3/library/random.htmlRenvoie un entier aléatoire N tel que a <= N <= b.
Documents: https://docs.python.org/3.1/library/random.html#random.randint
la source
randint(0,9)
-à- dire qu'elle ne renverra jamais 9). Cela n'est pas reflété dans la documentation en ligne, mais c'est dans l'aide intégrée.Essaye ça:
la source
Cela génère 10 entiers pseudo-aléatoires compris entre 0 et 9 inclus.
la source
Le
secrets
module est nouveau dans Python 3.6. C'est mieux que lerandom
module pour la cryptographie ou la sécurité.Pour imprimer au hasard un entier dans la plage inclusive 0-9:
Pour plus de détails, voir PEP 506 .
la source
Choisissez la taille du tableau (dans cet exemple, j'ai choisi la taille 20). Et puis, utilisez ce qui suit:
Vous pouvez vous attendre à voir une sortie de la forme suivante ( différents entiers aléatoires seront retournés chaque fois que vous l'exécuterez; par conséquent, vous pouvez vous attendre à ce que les entiers dans le tableau de sortie diffèrent de l'exemple donné ci-dessous ).
la source
Essayez ceci
random.shuffle
la source
J'essaierais l'une des options suivantes:
1.> numpy.random.randint
2.> numpy.random.uniform
3.> random.randrange
4.> random.randint
La vitesse:
► np.random.randint est le plus rapide , suivi de np.random.uniform et random.randrange . random.randint est le plus lent .
► np.random.randint et np.random.uniform sont beaucoup plus rapides (~ 8 - 12 fois plus rapides) que random.randrange et random.randint .
Remarques:
la source
%timeit
marche dans votre environnement?En cas de nombres continus
randint
ourandrange
sont probablement les meilleurs choix, mais si vous avez plusieurs valeurs distinctes dans une séquence (c'est-à-dire alist
), vous pouvez également utiliserchoice
:choice
fonctionne également pour un élément d'un échantillon non continu:Si vous en avez besoin "cryptographiquement fort" il y a aussi un
secrets.choice
en python 3.6 et plus récent:la source
random.sample
. Avec le remplacement, vous pouvez utiliser une compréhension avecchoice
: par exemple pour une liste contenant 3 valeurs aléatoires avec remplacement:[choice(values) for _ in range(3)]
Alors que de nombreux articles montrent comment obtenir un entier aléatoire, la question d'origine demande comment générer un entier aléatoire s (pluriel):
Pour plus de clarté, nous montrons ici comment obtenir plusieurs entiers aléatoires.
Donné
Code
Entiers aléatoires multiples
Exemple d'entiers aléatoires
Détails
Certains articles montrent comment générer nativement plusieurs entiers aléatoires. 1 Voici quelques options qui répondent à la question implicite:
random.random
renvoie un flottant aléatoire dans la plage[0.0, 1.0)
random.randint
retourne un entier aléatoireN
tel quea <= N <= b
random.randrange
alias derandint(a, b+1)
random.shuffle
mélange une séquence en placerandom.choice
retourne un élément aléatoire de la séquence non viderandom.choices
retourne lesk
sélections d'une population (avec remplacement, Python 3.6+)random.sample
retournek
des sélections uniques d'une population (sans remplacement): 2Voir également l' exposé de R. Hettinger sur le découpage et l'alias en utilisant des exemples du
random
module.Voici une comparaison de quelques fonctions aléatoires dans la bibliothèque standard et Numpy:
Vous pouvez également convertir rapidement l'une des nombreuses distributions de Numpy en un échantillon d'entiers aléatoires. 3
Exemples
1 À savoir @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth mentionne ce module affichant un entier. 3 Démontré par @Siddharth Satpathy
la source
si vous souhaitez utiliser numpy, utilisez ce qui suit:
la source
Pour obtenir une liste de dix échantillons:
la source
Génération d'entiers aléatoires entre 0 et 9.
Production:
la source
random.sample
est un autre qui peut être utiliséla source
La meilleure façon est d'utiliser la fonction d'importation aléatoire
ou sans aucune importation de bibliothèque:
ici, le popitems supprime et renvoie une valeur arbitraire du dictionnaire
n
.la source
Il s'agit plus d'une approche mathématique mais cela fonctionne à 100% du temps:
Disons que vous souhaitez utiliser la
random.random()
fonction pour générer un nombre entrea
etb
. Pour ce faire, procédez comme suit:num = (b-a)*random.random() + a;
Bien sûr, vous pouvez générer plus de nombres.
la source
Depuis la page de documentation du module aléatoire :
random.SystemRandom , qui a été introduit dans Python 2.4, est considéré comme cryptographiquement sécurisé . Il est toujours disponible dans Python 3.7.1 qui est à jour au moment de l'écriture.
Au lieu de
string.digits
,range
pourrait être utilisé par certaines des autres réponses avec peut-être une compréhension. Mélangez et assortissez selon vos besoins.la source
OpenTURNS permet non seulement de simuler les entiers aléatoires mais également de définir la distribution associée à la
UserDefined
classe définie.Ce qui suit simule 12 résultats de la distribution.
Cela imprime:
Les crochets sont là parce que
x
c'estPoint
en 1 dimension. Il serait plus facile de générer les 12 résultats en un seul appel àgetSample
:produirait:
Plus de détails sur ce sujet sont ici: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
la source
J'ai eu plus de chance avec cela pour Python 3.6
Ajoutez simplement des caractères comme 'ABCD' et 'abcd' ou '^! ~ = -> <' pour modifier le pool de caractères à partir duquel vous souhaitez modifier, changez la plage pour modifier le nombre de caractères générés.
la source