如何在Python中生成介于0和9(含)之间的随机整数?
例如,0
、1
、2
、3
、4
、5
、6
、7
、8
、9
尝试使用random.randrange
函数:
from random import randrange
print(randrange(10))
secrets
模块获取更安全的随机数。参考文献:https://docs.python.org/zh-cn/3/library/random.html - user6269864secrets
模块来完成此操作:
import secrets
secrets.randbelow(10)
- sazeracrandom.SystemRandom()
的实例并调用该实例的方法;random.SystemRandom()
和 secrets
(我相信它是基于它实现的)都依赖于操作系统提供的加密随机性(例如,在 Windows 上使用 CryptGenRandom
,在类 UNIX 系统上使用 /dev/urandom
)。 - ShadowRangerrandom.randint
:import random
print(random.randint(0, 9))
文档说明:
random.randint(a, b)
Return a random integer N such that
a <= N <= b
. Alias forrandrange(a, b+1)
.
试试这个:
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)
from random import randint
x = [randint(0, 9) for p in range(0, 10)]
这将生成10个在0到9范围内(包括0和9)的伪随机整数。
row_count
)的试运行中仅使用10行(RANDOM_LIMIT
),因此我根据这个答案使用了random_row_nos = [randint(1, row_count) for p in range(0, RANDOM_LIMIT)]
,第一次就成功了! - WinEunuuchs2Unixsecrets
模块是 Python 3.6 中的新模块。在密码学或安全方面使用比 random
模块更好。
要随机打印一个0-9(包括0和9)之间的整数:
from secrets import randbelow
print(randbelow(10))
详细信息请参见PEP 506。
请注意,这实际上取决于使用情况。使用random
模块可以设置随机种子,有助于生成伪随机但可重复的结果,而secrets
模块则不可能。
random
模块还更快(在Python 3.9上进行了测试):
>>> timeit.timeit("random.randrange(10)", setup="import random")
0.4920286529999771
>>> timeit.timeit("secrets.randbelow(10)", setup="import secrets")
2.0670733770000425
secrets
比 random
慢得多,这合理吗?一定有什么缺点。 - Mark Ransom我会尝试以下其中一个:
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.> random.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]
速度:
► np.random.uniform和 np.random.randint 比np.random.choice, random.randrange, random.randint 快得多(快约10倍)。
%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)
注意:
1.> np.random.randint 生成一个半开区间 [low, high) 内的随机整数。
2.> np.random.uniform 生成一个半开区间 [low, high) 内均匀分布的随机数。
3.> np.random.choice 以 np.arange(n) 的形式生成一个半开区间 [low, high) 内的随机样本。
4.> random.randrange(stop) 从区间 start 到 stop(不包括 stop)中随机选择一个数。
5.> random.randint(a, b) 返回一个满足 a <= N <= b 的随机整数 N。
6.> astype(int) 将 numpy 数组转换为整型数据类型。
7.> 我已选择 size = (15,),这将给您一个长度为 15 的 numpy 数组。
pip install numpy
)并且使用import numpy as np
导入了它? - Unterbelichtet选择数组的大小(在本例中,我选择的大小为20)。然后使用以下代码:
import numpy as np
np.random.randint(10, size=(1, 20))
您可以期望看到以下形式的输出(每次运行时将返回不同的随机整数;因此,您可以预期输出数组中的整数与以下示例不同)。
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
虽然许多文章展示了如何获取一个随机整数,但是原始问题要求生成随机整数(复数):
如何在 Python 中生成介于 0 到 9(包括 0 和 9)之间的随机整数?
为了清晰起见,在这里我们演示如何获得多个随机整数。
假定
>>> import random
lo = 0
hi = 10
size = 5
代码
多个随机整数
# 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]
随机整数示例
# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]
# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]
详情
有些帖子展示了如何本地生成多个随机整数。1以下是一些解决暗示问题的选项:
random.random
返回一个在区间 [0.0, 1.0)
内的随机浮点数random.randint
返回一个在区间 a <= N <= b
内的随机整数 N
random.randrange
是 randint(a, b+1)
的别名random.shuffle
对一个序列进行原地打乱random.choice
从非空序列中返回一个随机元素random.choices
返回一个从总体(有放回)选取 k
个样本的列表,适用于 Python 3.6+random.sample
返回一个从总体(无放回)选取 k
个不重复样本的列表:2请参阅R. Hettinger有关使用random
模块示例进行分块和别名处理的talk。
下面是标准库和Numpy中一些随机函数的比较:
| | random | numpy.random |
|-|-----------------------|----------------------------------|
|A| random() | random() |
|B| randint(low, high) | randint(low, high) |
|C| randrange(low, high) | randint(low, high) |
|D| shuffle(seq) | shuffle(seq) |
|E| choice(seq) | choice(seq) |
|F| choices(seq, k) | choice(seq, size) |
|G| sample(seq, k) | choice(seq, size, replace=False) |
示例
>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10, 3, 1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])
1即@John Lawrence Aspden,@S T Mohammed,@SiddTheKid,@user14372,@zangw等人。 2@prashanth提到了这个模块显示一个整数。 3@Siddharth Satpathy演示了这个模块。
random
模块。
使用以下代码...from random import randint
num1= randint(0,9)
这将把变量num1
设置为介于0
和9
之间的随机数(包括0
和9
)。
randrange(10)
。 - SamTheProgrammer通过random.shuffle
尝试这个。
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
>>> from random import SystemRandom >>> cryptogen = SystemRandom() >>> [cryptogen.randrange(3) for i in range(20)]
请注意,以上代码仅供参考,不应用于生产环境。 - Charlie Parkerimport random; print(random.randint(0, 9))
- Charlie Parker