如何在Python中生成介于0和9(含)之间的随机整数?
例如,0
、1
、2
、3
、4
、5
、6
、7
、8
、9
对于Python 3.6,我运气更好。
str_Key = ""
str_RandomKey = ""
for int_I in range(128):
str_Key = random.choice('0123456789')
str_RandomKey = str_RandomKey + str_Key
只需添加字符如'ABCD'和'abcd'或'^!~=-><'以更改要提取的字符池,更改范围以更改生成的字符数。
import numpy as np
# option 1
numbers = np.random.default_rng().integers(0, 10, size=1000000)
# option 2
numbers = np.random.default_rng().choice(10, size=1000000)
default_rng()
,如下所示。rng = np.random.default_rng(np.random.MT19937())
numbers = rng.integers(0, 10, size=1000)
random
如果您只能使用标准库,并且想要生成大量的随机整数,那么random.choices()
比random.randint()
或random.randrange()
要快得多。2 例如,要生成100万个介于0和9之间的随机整数:
import random
numbers = random.choices(range(10), k=1000000)
import timeit
import random
import numpy as np
def numpy_randint():
return np.random.randint(0, 10, size=1000000)
def numpy_Gen_integers():
return np.random.default_rng().integers(0, 10, size=1000000)
def numpy_Gen_choice():
return np.random.default_rng().choice(10, size=1000000)
def random_randrange():
return [random.randrange(10) for _ in range(1000000)]
def random_choices():
return random.choices(range(10), k=1000000)
t1 = min(timeit.repeat(numpy_randint, number=100)) # 1.9559144999366254
t2 = min(timeit.repeat(numpy_Gen_integers, number=100)) # 0.6704635999631137
t3 = min(timeit.repeat(numpy_Gen_choice, number=100)) # 0.6696784000378102
t4 = min(timeit.repeat(random_randrange, number=100)) # 64.98768060002476
t5 = min(timeit.repeat(random_choices, number=100)) # 25.686857299879193
2 如果我们看一下它们的源代码实现,random.randrange()
(以及random.randint()
,因为它是前者的语法糖)使用一个while循环来生成伪随机数,通过_randbelow
方法,而random.choices()
则调用random()
一次,并使用它来索引种群。因此,如果需要生成大量的伪随机数,这个while循环的成本会累积起来。
UserDefined
定义类定义相关分布。
以下模拟了 12 个分布结果。
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)
这将打印:
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
x
是1维中的一个Point
。
通过单次调用getSample
生成12个结果会更容易:sample = distribution.getSample(12)
将会生成:
>>> print(sample)
[ v0 ]
0 : [ 3 ]
1 : [ 9 ]
2 : [ 6 ]
3 : [ 3 ]
4 : [ 2 ]
5 : [ 6 ]
6 : [ 9 ]
7 : [ 5 ]
8 : [ 9 ]
9 : [ 5 ]
10 : [ 3 ]
11 : [ 2 ]
关于这个主题的更多细节在这里:http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
>>> from random import SystemRandom >>> cryptogen = SystemRandom() >>> [cryptogen.randrange(3) for i in range(20)]
请注意,以上代码仅供参考,不应用于生产环境。 - Charlie Parkerimport random; print(random.randint(0, 9))
- Charlie Parker