Python面试题更新 2026-08-05

在 Python 中,random 模块提供了哪些常用的随机数生成方法?请说明如何利用该模块进行随机打乱序列的操作,以及如何实现从序列中随机抽取元素(包括有放回和无放回两种方式)。

技术原理Python

考察说明

考查对 Python random 模块核心功能(随机数生成、shuffle、抽样)的掌握程度。

回答思路

  1. 【回答框架 1】random 模块是 Python 标准库中用于生成伪随机数的模块,核心函数包括 random.random() 返回 [0.0, 1.0) 范围内的浮点数,random.randint(a, b) 返回闭区间 [a, b] 内的整数,random.uniform(a, b) 返回指定范围内的均匀分布浮点数。此外还有 random.choice(seq) 从非空序列中随机返回一个元素。
  2. 【回答框架 2】随机乱序使用 random.shuffle(x),它会原地打乱可变序列(如列表)的元素顺序,并返回 None。如果需要保留原序列并返回新乱序列表,可使用 random.sample(x, len(x)),它返回一个无放回抽样形成的新列表。
  3. 【回答框架 3】随机抽样分为有放回和无放回两种:random.sample(population, k) 实现无放回抽样,返回长度为 k 的新列表,要求 k 不超过序列长度;random.choices(population, weights=None, k=1) 实现有放回抽样,可根据权重进行抽样,k 可大于序列长度。
  4. 【回答框架 4】random 模块基于梅森旋转算法(Mersenne Twister)生成伪随机数,因此并非真正随机;可通过 random.seed(a) 设置种子,保证结果可重现,这在测试和调试中很有用。
  5. 【关键点 1】random.random() 生成 [0.0, 1.0) 的浮点数,randint(a, b) 生成闭区间整数。
  6. 【关键点 2】random.shuffle(x) 原地打乱列表,random.sample(x, len(x)) 返回新乱序列表。
  7. 【关键点 3】random.sample 无放回抽样,random.choices 有放回抽样且支持权重。
  8. 【易错点 1】random.shuffle 仅适用于可变序列,且会修改原序列,如果不想修改原序列应使用 random.sample。
  9. 【易错点 2】random.sample 要求 k 不大于序列长度,若不满足会抛出 ValueError。
  10. 【易错点 3】random 模块不适合用于安全相关的随机数生成,应使用 secrets 模块。