Python实现生成指定位数范围的唯一随机数列表
解决方案
这事儿不难,核心就是把你给的位数范围转换成对应的数值区间,再结合random.sample就能搞定,我给你捋清楚步骤和代码:
首先明确位数到数值范围的转换逻辑,按照你给出的例子推导通用规则:
- 当最小位数是1时,数值下限是0;如果最小位数大于1,下限就是
10^(最小位数-1)(比如2位数的最小值是10=10¹) - 数值上限统一是
10^最大位数 - 1(比如4位数的最大值是9999=10⁴-1)
接下来结合这个逻辑写函数,直接用random.sample生成唯一随机数,代码如下:
from random import sample def generate_unique_random_numbers(min_digits, max_digits, count): # 先做参数校验,避免无效输入 if min_digits < 1: raise ValueError("最小位数不能小于1哦") if max_digits < min_digits: raise ValueError("最大位数不能比最小位数小呀") # 计算数值范围的上下限 lower_bound = 0 if min_digits == 1 else 10 ** (min_digits - 1) upper_bound = 10 ** max_digits - 1 # 注意range是左闭右开的,所以要把上限+1才能包含最大的那个数 number_range = range(lower_bound, upper_bound + 1) # 生成指定数量的唯一随机数 return sample(number_range, count)
测试示例:
- 调用
generate_unique_random_numbers(1, 4, 5)→ 返回5个0到9999之间的唯一随机数 - 调用
generate_unique_random_numbers(1, 1, 3)→ 返回3个0到9之间的唯一随机数 - 调用
generate_unique_random_numbers(2, 3, 4)→ 返回4个10到999之间的唯一随机数
这样就完全贴合你的需求了,参数校验还能避免一些不合理的输入,比如传入min_digits=0或者max_digits=2、min_digits=3这种情况。
内容的提问来源于stack exchange,提问作者91DarioDev
相关产品推荐
相关产品推荐

