Python怎么生成指定范围的10个随机数列表
详细讲解在Python中生成指定数值范围内10个随机数列表的方法,区分允许重复与互不重复两种核心场景,涵盖整数与浮点数生成、完整代码示例、边界条件及避坑指南。
在 Python 中生成指定范围的 10 个随机数列表,核心决策取决于两个前置需求:生成的数字是否允许重复,以及需要生成整数还是浮点数。如果要求 10 个数字严格互不相同(无放回抽样),应使用 random.sample();如果允许数字重叠(有放回抽样),可以使用 random.choices() 或列表推导式配合 random.randint();若需生成连续区间的浮点数,则使用 random.uniform()。本文将围绕这几种典型场景展开,提供具体代码写法、运行示例与避坑要点。
一、标准操作流程与准备工作
在编写代码前,需要明确三个具体要素:数值区间的上下限(例如 1 到 100)、目标长度(10 个元素),以及区间是双闭还是左闭右开。Python 自带的 random 模块提供了完备的随机数工具,无需安装任何第三方库,直接通过 import random 即可引入。
生成操作通常遵循明确的逻辑步骤:先界定输入参数与业务对唯一性的要求,再调用对应的函数生成列表,最后检查列表长度和边界数值。整个流程如下图所示:
二、场景一:生成 10 个互不重复的随机整数
在抽奖、随机发牌、数据集无重复打乱等场景中,生成的 10 个数字必须严格互不相同。这在统计学上称为“无放回抽样”。
1. 核心实现方式:random.sample()
标准库中的 random.sample(population, k) 函数专为无放回抽样设计。第一个参数传入候选序列,第二个参数 k 传入需要抽取的元素个数(这里为 10)。
import random
# 设定目标范围为 1 到 100(包含两端)
start = 1
end = 100
# range(start, end + 1) 生成 [1, 100] 的连续整数序列
unique_randoms = random.sample(range(start, end + 1), 10)
print("生成的随机列表:", unique_randoms)
print("列表长度:", len(unique_randoms))
random.sample() 要求传入的候选总体容量必须大于或等于抽取的数量。如果指定的范围不足 10 个数(例如 range(1, 5) 总共只有 4 个数),Python 会立即抛出 ValueError: Sample larger than population or is negative。因此,在不确定范围时,应先断言 end - start + 1 >= 10。
三、场景二:生成允许重复的 10 个随机整数
在模拟掷骰子、抛硬币或模拟传感器波动等场景中,每次抽出的数字相互独立,前后抽取互不影响,同一个数字完全可以出现多次。这属于“有放回抽样”。
1. 推荐写法 A:random.choices()
Python 3.6 及以上版本推荐使用 random.choices(population, k=10),单行代码即可直接返回包含 10 个元素的列表,底层为有放回抽样:
import random
start = 1
end = 100
# k=10 指定生成 10 个数字,元素可能重复
choices_randoms = random.choices(range(start, end + 1), k=10)
print("生成的随机列表:", choices_randoms)
在上述示例输出中,数字 88 和 34 均出现了两次,符合有放回抽样的特征。该方法最大的好处是:即使指定的范围极小(例如只有 1 到 3),它也能正常独立抽取 10 次并返回列表,不会像 sample() 那样报错。
2. 经典写法 B:列表推导式配合 random.randint()
对于刚接触 Python 的读者,列表推导式结构非常直观:通过循环执行 10 次 random.randint(a, b) 来构造列表。
import random
start = 1
end = 100
# random.randint(start, end) 包含 end 端点本身
comprehension_randoms = [random.randint(start, end) for _ in range(10)]
print("生成的随机列表:", comprehension_randoms)
random.randint(a, b) 返回的是满足 a <= n <= b 的整数,即两端完全闭合(包含 b)。而 range(a, b) 是左闭右开区间(不包含 b)。这是初学者极易混淆的地方。
四、场景三:生成指定范围的 10 个随机浮点数
若需要的是连续区间的实数(例如生成 10.0 到 50.0 之间的温度读数),应当使用 random.uniform(a, b)。该函数返回在指定区间 [a, b] 内均匀分布的浮点数。
import random
start_float = 10.0
end_float = 50.0
# 生成 10 个连续分布的双精度浮点数
float_randoms = [random.uniform(start_float, end_float) for _ in range(10)]
# 如果需要保留 2 位小数,可结合 round() 函数
formatted_randoms = [round(x, 2) for x in float_randoms]
print("浮点数列表:", formatted_randoms)
五、场景选型决策树
面对不同的业务输入,如何准确选择最优函数?可参考以下推导逻辑:首先区分所需数据类型(整数或浮点数),对于整数再核实是否允许重合。根据这两个条件即可明确对应的最佳语法:
六、进阶技巧与注意事项
1. 随机结果的可复现性(设置随机种子)
在编写自动化测试、算法调试或实验报告时,往往需要每次运行代码都得到相同的一组“随机数”,以便核对输出。此时可在生成前调用 random.seed(value):
import random
# 设定固定种子值(任意整数)
random.seed(42)
test_list_1 = random.sample(range(1, 101), 10)
random.seed(42)
test_list_2 = random.sample(range(1, 101), 10)
print(test_list_1 == test_list_2) # 输出为 True,两次结果完全一致
2. 数据科学环境下的替代方案(NumPy)
若当前项目已引入了数据分析库 numpy,也可以直接使用 NumPy 提供的向量化生成方法。例如 numpy.random.randint(low, high, size=10)。但对于日常常规脚本,Python 内置的 random 模块无需第三方依赖,启动速度更快,内存开销更小。
七、方法横向对比与总结
为了便于快速查阅与选型,下表对 Python 生成指定范围 10 个随机数列表的四种主流方式进行了对比:
总结而言,在 Python 中生成指定范围的 10 个随机数列表,代码实现非常精简。核心原则是:要唯一选 random.sample(),可重复选 random.choices() 或列表推导式,浮点数选 random.uniform()。只要注意 range() 的右开边界以及 sample() 对候选池大小的要求,就能稳定写出健壮的随机数生成逻辑。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













