针对指定范围内随机生成不重复的n个数的问题,下面提供几种实现方法。
方法一:使用 random.sample()
Python 的 random 模块提供了一个 sample() 方法,可以在指定范围内随机生成不重复的 n 个数。
import random
start_num = 1 # 范围起始值
end_num = 100 # 范围终止值
n = 5 # 随机生成的数字个数
num_list = random.sample(range(start_num, end_num + 1), n) # 生成 n 个不重复的随机数
print(num_list)
运行结果为:
[60, 16, 63, 74, 58]
上述代码中,range() 函数生成了从起始值到终止值的整数序列,加上 +1 是因为 range() 函数是左闭右开的,即不包含终止值,最终生成的序列包含起始值和终止值。接着,使用 random.sample() 函数在这个序列中生成了 n 个不重复的随机数。
方法二:使用 numpy.random.choice()
除了使用 random.sample() 方法外,还可以使用 NumPy 库中的 random.choice() 方法生成不重复的随机数序列。
import numpy as np
start_num = 1 # 范围起始值
end_num = 100 # 范围终止值
n = 5 # 随机生成的数字个数
num_list = np.random.choice(range(start_num, end_num + 1), n, replace=False) # 生成 n 个不重复的随机数
print(num_list)
运行结果为:
[90 64 66 1 86]
上述代码中,np.random.choice() 函数的 replace 参数设置为 False,表示生成的数字不重复。
示例说明
假设现在需要随机生成包含大小写字母和数字在内的验证码,需要在这个范围内随机生成 8 个不重复的字符,可以使用如下代码:
import random
import string
chars = string.ascii_letters + string.digits # 验证码范围大小写字母和数字
n = 8 # 随机生成字符的个数
code = ''.join(random.sample(chars, n)) # 随机生成 n 个不重复的字符
print(code)
运行结果为:
51O8jluT
在这个示例中,首先使用了 string.ascii_letters 和 string.digits 来定义验证码的范围(大小写字母和数字),然后使用 random.sample() 方法从此范围中随机生成了 8 个不重复字符,最后使用 ''.join() 将列表转化成字符串。这样就完成了一个含有大小写字母和数字的验证码的生成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 在指定范围内随机生成不重复的n个数实例 - Python技术站