random.randint(a, b)仅返回单个整数,不支持size参数;生成多个需列表推导式如[random.randint(1,10) for _ in range(5)];要求不重复用random.sample(range(1,11),5);大批量用np.random.randint(1,11,size=n)。

random.randint 生成单个随机整数没问题,但不能直接生成数组
很多人写 random.randint(1, 10, size=5) 会报错——randint 根本不接受 size 参数。它只返回一个整数,想得到多个,必须显式调用多次或配合循环/推导式。
常见错误现象:TypeError: randint() takes exactly 3 arguments (4 given) 或直接语法报错。
- 正确用法是
random.randint(a, b),闭区间,含 a 和 b - 若需生成 5 个 [1, 10] 内的随机整数,得用列表推导式:
[random.randint(1, 10) for _ in range(5)] - 注意:每次调用都独立采样,无重复限制(可能重复)
需要不重复的随机整数数组?别硬套 randint,改用 random.sample
如果业务要求“从指定范围内选 n 个互不相同的随机整数”,random.randint 加去重逻辑(比如 while 循环 + set)既低效又难控终止条件。直接用 random.sample 更稳。
-
random.sample(range(1, 11), 5)—— 从 1 到 10(左闭右开)中无放回抽 5 个 - 注意
range(1, 11)对应数学上的 [1, 10],和randint(1, 10)范围一致 - 若 n 大于可选总数(如
sample(range(1,5), 10)),会抛ValueError: Sample larger than population
大量数据或需 NumPy 加速时,换用 np.random.randint
当你要生成成千上万个随机整数,纯 Python 的列表推导式速度慢、内存占用高。这时候该切到 NumPy:
立即学习“Python免费学习笔记(深入)”;
-
np.random.randint(1, 11, size=10000)—— 注意:NumPy 的randint是左闭右开,即 [1, 11),等价于 [1, 10] - 参数顺序和返回类型不同:
low、high、size,返回的是ndarray,不是 list - 旧版 NumPy(np.random.RandomState,新版推荐用
np.random.Generator实例,更可控且线程安全
生成结果要可复现?必须设 seed,但位置很关键
无论用 random 还是 np.random,设 seed 才能复现实验。但容易忽略的是:seed 只影响其后第一次随机调用前的状态。
- 写
random.seed(42); [random.randint(1,10) for _ in range(3)]没问题 - 但如果在 seed 前已调用过任何 random 函数(比如误触了
random.random()),seed 就失效了 - NumPy 同理:
np.random.seed(42)必须在首次生成前调用;新式Generator推荐:rng = np.random.default_rng(42); rng.integers(1, 11, size=5)
边界值处理和 seed 时机,是调试时最常被跳过的两个点。


















