You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成指定数量不重复随机数时超量问题的排查与修复

问题分析与修复方案

问题原因

你的代码里外层while循环判断列表长度小于n时,就会执行内层的for循环(跑n次)。比如当列表长度已经是n-1时,进入while循环后,内层for循环第一次生成的随机数如果不在列表里,添加后列表长度就达到n了,但内层for循环不会立刻停止,还会继续跑完剩下的n-1次。这期间要是再生成不在列表里的数,就会被追加进去,导致最终列表长度超过n。

另外还有个小问题:random.randint(1,61)会生成1到61的整数,不符合你要的1-60范围,得改成random.randint(1,60)。

修复方案

方案一:调整原逻辑,去掉冗余循环

去掉内层的for循环,只保留while循环来逐个生成符合条件的随机数,直到列表长度达到n:

import random

def r_list(n):
    r_list = []
    while len(r_list) < n:
        rn = random.randint(1, 60)  # 修正范围到1-60
        if rn not in r_list:
            r_list.append(rn)
    r_list.sort()
    print(r_list)

方案二:用random.sample更高效实现

Python的random模块自带sample方法,可以直接从指定序列中选取n个不重复的随机元素,比手动循环判断效率高很多,尤其是当n比较大的时候:

import random

def r_list(n):
    # 从1到60的整数序列中选n个不重复元素,排序后输出
    result = sorted(random.sample(range(1, 61), n))
    print(result)

内容的提问来源于stack exchange,提问作者L_G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:18:37