如何在Python中生成0到9(含)之间的随机整数?
例如,0
、1
、2
、3
、4
、5
、6
、7
、8
、9
。
试试吧。
from random import randrange
print(randrange(10))
更多信息:http://docs.python.org/library/random.html#random.randrange
secrets
模块是 Python 3.6 中的新模块。
这比 [random
][2] 模块在密码学或安全方面的用途要好。
随机打印一个包含范围为0-9的整数。
from secrets import randbelow
print(randbelow(10))
详见[PEP506][3]。
1:
[2]: https://docs.python.org/3.6/library/random.html#module-random [3]: [3]:https://www.python.org/dev/peps/pep-0506/
选择数组的大小(在本例中,我选择的大小是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]])
如果是连续数,randint
或randrange
可能是最好的选择,但如果你有几个不同的值在一个序列中(即list
),你也可以使用choice
。
列表")你也可以使用 choice
。
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
也适用于非连续样本中的一个项目。
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
如果你需要它的"密码学强"。
还有一个在python 3.6及更新版本中的secrets.choice
。
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
我会尝试以下几种方法之一。
1.>.numpy.random.randint numpy.random.randint**。
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])
2.>.[numpy.random.uniform][2] [numpy.random.uniform][2]**。
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])
3.> [random.randrange][3]
from random import randrange
X3 = [randrange(10) for i in range(15)]
print (X3)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
4.> [random.randint][4]
from random import randint
X4 = [randint(0, 9) for i in range(0, 15)]
print (X4)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
速度:
&#9658.np.random.randint是快的。 np.random.randint是最快的,其次是np.random.uniform和random.randrange。 random.randint是最慢的**。
►。 np.random.randint和np.random.uniform都比random.randrange和random.randint快得多**(约8 - 12倍)。
%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 [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在半开区间[低,高]内产生随机整数。
2.> [np.random.uniform][2] 在半开区间[低,高]上生成均匀分布的数。
3.> [random.randrange(stop)][3] 从range(start,stop,step)中生成一个随机数。
4.> [random.randint(a, b)][4] 返回一个随机整数N,使得a <= N <= b。
5.> [astype(int)][5] 将numpy数组转换为int数据类型。
6.> 我选择了size = (15,)。 这将给你一个长度=15的numpy数组。
1:
[2]: https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html [3]: https://docs.python.org/2/library/random.html#random.randrange [4]: https://docs.python.org/2/library/random.html [5]: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ndarray.astype.html
虽然很多帖子演示了如何获得*个随机整数,但最初的问题是问如何生成随机整数s(复数)。
如何在Python中生成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</sup>。 这里有一些选项可以解决隐含的问题。
random.random
][10] 返回一个范围为[0.0, 1.0)
的随机浮点数。random.randint
][9]返回一个随机整数N
,即a <= N <= b
。random.randrange
][8]randint(a, b+1)
的别称。random.shuffle
][7]在原地洗牌。random.choice
][6]从非空序列中返回一个随机元素。random.chips
][3]从一个群体中返回k
个选择(有替换,Python 3.6+)random.sample
][2]从人口中返回k
个唯一的选择(不替换):2</sup>。另见R.
Hettinger'的[talk][12],关于使用random
模块的例子的Chunking和Aliasing。
这里是标准库和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) |
你也可以在Numpy中快速地将许多[分布][10]中的一个转换为随机整数的样本.3
例子
>>> 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</sub>演示。
[1]: https://docs.python.org/3/library/random.html#random.choice [2]: https://docs.python.org/3/library/random.html#random.sample [3]: https://docs.python.org/3/library/random.html#random.choices [5]: https://stackoverflow.com/a/47321460/4531270
[6]: https://docs.python.org/3/library/random.html#random.choice [7]: https://docs.python.org/3/library/random.html#random.shuffle [8]: https://docs.python.org/3/library/random.html#random.randrange [9]: https://docs.python.org/3/library/random.html#random.randint [10]: https://docs.scipy.org/doc/numpy-1.15.0/reference/routines.random.html#distributions [11]: https://docs.python.org/3.9/library/random.html#random.random [12]:
生成0到9之间的随机整数。
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
产出:
[4 8 0 4 9 6 9 9 0 7]
最好的方法是使用导入Random函数
import random
print(random.sample(range(10), 10))
或没有任何库导入。
n={}
for i in range(10):
n[i]=i
for p in range(10):
print(n.popitem()[1])
这里[popitems][1]从字典n
中删除并返回一个任意值。
[1]: https://docs.python.org/3.6/library/stdtypes.html#dict.popitem
来自[随机][1]模块的文档页。
警告:本模块的伪随机生成器不应该被使用。 这个模块的伪随机发生器不应该是...。
用于安全目的。 使用os.urandom()或SystemRandom,如果你想使用
需要一个密码学安全的伪随机数发生器。
在Python 2.4中引入的[random.SystemRandom][2]被认为是加密安全的。 它在Python 3.7.1中仍然可用,这是在编写本文时的最新版本。
>>>。
输入字符串
>>>。
字符串.数字
'0123456789'
>>>。
导入随机
>>>。
random.SystemRandom().choose(string.digits)
'8'
>>>。
随机.系统随机().选择(string.digits)
'1'
>>>。
随机.SystemRandom().choose(string.digits)
'8'
>>>。
随机.系统随机().选择(string.digits)
'5'
根据自己的需要进行混搭。 [1]: https://docs.python.org/2.7/library/random.html [2]: https://docs.python.org/2.7/library/random.html?highlight=random#random.SystemRandom