Wie kann ich in Python zufällige Ganzzahlen zwischen 0 und 9 (einschließlich) generieren?
Zum Beispiel, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
Aneurysma
Wie kann ich in Python zufällige Ganzzahlen zwischen 0 und 9 (einschließlich) generieren?
Zum Beispiel, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
kowschenin
Versuchen random.randrange
:
from random import randrange
print(randrange(10))
Nur eine Anmerkung, dies sind Pseudozufallszahlen und sie sind nicht kryptografisch sicher. Verwenden Sie dies auf keinen Fall, wenn Sie nicht möchten, dass ein Angreifer Ihre Zahlen errät. Verwenden Sie die secrets
Modul für bessere Zufallszahlen. Bezug: docs.python.org/3/library/random.html
– Benutzer6269864
18. Oktober 2018 um 8:08 Uhr
Insbesondere sollten Geheimnisse dem standardmäßigen Pseudozufallszahlengenerator im Zufallsmodul vorgezogen werden, der für die Modellierung und Simulation entwickelt wurde, nicht für Sicherheit oder Kryptografie.
– florian.isopp
1. Dezember 2020 um 23:07 Uhr
Um zu ersparen, dass jemand zum Secrets-Modul navigieren muss, um dies zu erreichen: import secrets
secrets.randbelow(10)
– Sazerac
5. Februar 2021 um 4:47 Uhr
Beachten Sie, dass das Secrets-Modul erstmals in Version 3.6 zu Python hinzugefügt wurde
– Benutzer3540325
30. April 2021 um 8:56 Uhr
@ user3540325: Vor Version 3.6 erstellt eine enge Annäherung eine Instanz von random.SystemRandom()
und Aufrufen der Methoden dieser Instanz; random.SystemRandom()
wie secrets
(von dem ich glaube, dass es in dieser Hinsicht implementiert ist) beruht auf der vom Betriebssystem bereitgestellten kryptografischen Zufälligkeit (z CryptGenRandom
unter Windows, /dev/urandom
auf UNIX-likes).
– ShadowRanger
17. Mai um 15:25 Uhr
JMSaaudio
Versuchen random.randint
:
import random
print(random.randint(0, 9))
Docs-Status:
random.randint(a, b)
Gibt eine zufällige ganze Zahl N zurück, sodass a <= N <= b.
Wie für 3.8 noch “Gib eine zufällige ganze Zahl N zurück, so dass a <= N <= b
. Pseudonym für randrange(a, b+1)
” @Yli
– Dennis
20. Juni 2020 um 1:06 Uhr
Andreas Hase
Versuche dies:
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)
Benutzer14372
from random import randint
x = [randint(0, 9) for p in range(0, 10)]
Dadurch werden 10 pseudozufällige Ganzzahlen im Bereich von 0 bis einschließlich 9 generiert.
Chris_Rands
Das secrets
Modul ist neu in Python 3.6. Das ist besser als die random
Modul für Kryptographie oder Sicherheitszwecke.
So drucken Sie zufällig eine Ganzzahl im inklusiven Bereich 0-9:
from secrets import randbelow
print(randbelow(10))
Einzelheiten finden Sie unter PEP 506.
Beachten Sie, dass es wirklich vom Anwendungsfall abhängt. Mit dem random
Modul können Sie einen zufälligen Seed setzen, nützlich für pseudozufällige, aber reproduzierbare Ergebnisse, und dies ist mit dem nicht möglich secrets
Modul.
random
Modul ist auch schneller (getestet auf Python 3.9):
>>> timeit.timeit("random.randrange(10)", setup="import random")
0.4920286529999771
>>> timeit.timeit("secrets.randbelow(10)", setup="import secrets")
2.0670733770000425
Dies würde die Antwort verbessern und sollte hinzugefügt werden. Die sicherheitsbewussteren Antworten sollten immer hinzugefügt werden, falls verfügbar.
– SudoKid
7. Februar 2018 um 17:15 Uhr
Ist es vernünftig, das anzunehmen secrets
wird viel langsamer sein als random
? Irgendwo muss doch ein Nachteil sein.
– Markieren Sie Lösegeld
17. Dezember 2021 um 23:13 Uhr
@MarkRansom siehe Bearbeiten
– Chris_Rands
18. Dezember 2021 um 18:22 Uhr
Ich würde eines der folgenden versuchen:
import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])
import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])
import numpy as np
X3 = np.random.choice(a=10, size=15 )
print (X3)
>>> array([1, 4, 0, 2, 5, 2, 7, 5, 0, 0, 8, 4, 4, 0, 9])
4.> random.randrange
from random import randrange
X4 = [randrange(10) for i in range(15)]
print (X4)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
5.> zufällig.randint
from random import randint
X5 = [randint(0, 9) for i in range(0, 15)]
print (X5)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
Geschwindigkeit:
► np.random.uniform und np.random.randint sind viel schneller (~10 mal schneller) als np.random.choice, random.randrange, random.randint .
%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.random.choice(a=10, size=15 )
>> 21 µs ± 629 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Anmerkungen:
1.> np.random.randint generiert zufällige ganze Zahlen über das halboffene Intervall [low, high).
2.> np.random.uniform generates uniformly distributed numbers over the half-open interval [low, high).
3.> np.random.choice generates a random sample over the half-open interval [low, high) as if the argument
a
was np.arange(n).4.> random.randrange(stop) generates a random number from range(start, stop, step).
5.> random.randint(a, b) returns a random integer N such that a <= N <= b.
6.> astype(int) casts the numpy array to int data type.
7.> I have chosen size = (15,). This will give you a numpy array of length = 15.
This would improve the answer and should be added. The more security minded answers should always be added if available.
Feb 7, 2018 at 17:15
Is it reasonable to assume that secrets
will be much slower than random
? There has to be a downside someplace.
Dec 17, 2021 at 23:13
@MarkRansom see edit
Dec 18, 2021 at 18:22
Commoner
Choose the size of the array (in this example, I have chosen the size to be 20). And then, use the following:
import numpy as np
np.random.randint(10, size=(1, 20))
You can expect to see an output of the following form (different random integers will be returned each time you run it; hence you can expect the integers in the output array to differ from the example given below).
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
Es ist auch hilfreich zu wissen, wie Numpy ein zufälliges Array einer bestimmten Größe generieren kann, nicht nur eine einzelne Zufallszahl. (Dokumente: numpy.random.randint)
– jkdev
25. Juni 2017 um 18:19 Uhr