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

能否用列表推导式改写生成6个不重复1-45随机数的Python代码?

问题解答

首先,你尝试的那种单列表推导式写法无法实现需求,原因有两个:

  • 列表推导式执行时,result还未被定义,引用num not in result会直接抛出NameError;
  • 就算解决了变量引用问题,列表推导式的循环次数固定为6次,若生成重复数,无法跳过并重新生成新数,最终得到的列表长度可能不足6个元素。

可行的替代方案

1. 最简洁高效的实现(推荐)

Python的random模块自带sample()方法,专门用于从序列中随机选取指定数量的不重复元素,一行代码就能完成需求:

import random
result = random.sample(range(1, 46), 6)
print(result)

2. 结合生成器+列表推导式(满足练习需求)

如果一定要用列表推导式,可以先写一个生成器函数处理去重和重试逻辑,再用列表推导式遍历生成器收集结果:

import random

def generate_unique_nums(count, start, end):
    seen = set()
    while len(seen) < count:
        num = random.randint(start, end)
        if num not in seen:
            seen.add(num)
            yield num

# 用列表推导式收集生成器输出的结果
result = [num for num in generate_unique_nums(6, 1, 45)]
print(result)

这种方式既用到了列表推导式,又通过生成器解决了动态去重和重试的问题,符合你的练习目的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:50:31