生成指定数量不重复随机数时超量问题的排查与修复
问题分析与修复方案
问题原因
你的代码里外层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
相关产品推荐
相关产品推荐

