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

如何在Python中生成无重复随机数?Python3.6无重复4位随机数实现

嘿,我来帮你搞定这两个Python随机数的问题!

一、如何在Python中生成不重复的随机数?

生成不重复随机数的方法有好几种,看你的需求场景来选:

  • 用random.sample()(最直接高效):如果你的目标是从一个已知的序列/范围里挑选N个不重复的随机数,这个方法是首选。它会直接返回一个包含N个唯一元素的列表,完全不用自己写去重逻辑。比如从1到100里选5个不重复的数:

    import random
    unique_nums = random.sample(range(1, 101), 5)
    print(unique_nums)  # 输出类似 [23, 5, 78, 12, 45]
    
  • 洗牌法(适合打乱全序列场景):如果你需要把一个序列里的所有元素随机打乱,且每个元素只出现一次,可以用random.shuffle()。比如把1到10的顺序彻底打乱:

    nums = list(range(1, 11))
    random.shuffle(nums)
    print(nums)  # 输出类似 [7, 2, 9, 1, 5, 10, 3, 8, 4, 6]
    
  • 循环生成+去重(不推荐大范围场景):如果你的随机数范围很大,且只需要少量不重复的数,也可以循环生成然后用集合去重,但这种方法效率很低——尤其是当你要的数量接近范围上限时,会重复生成很多重复值,不推荐优先使用。举个例子:

    import random
    unique_set = set()
    while len(unique_set) < 5:
        unique_set.add(random.randint(1, 100))
    unique_nums = list(unique_set)
    print(unique_nums)
    
二、Python 3.6中生成无重复数字的4位随机数(0000-9999)

这个需求的核心是4个数字完全不重复,且允许前导零,最直接高效的思路是直接从0-9这10个数字里选4个不重复的,再拼接成4位字符串:

具体实现代码

import random

def get_unique_4digit_num():
    # 从0到9中随机挑选4个不重复的数字
    selected_digits = random.sample(range(10), 4)
    # 把数字转成字符串并拼接,自动保留前导零(比如选了0、1、2、3就变成"0123")
    return ''.join(map(str, selected_digits))

# 测试示例
print(get_unique_4digit_num())  # 输出类似 "3075" 或 "0148"

思路拆解

  1. 为什么选random.sample()?:它天生保证选出来的元素是唯一的,不用额外写逻辑检查重复数字,效率拉满。
  2. 为什么用字符串格式?:如果直接转成整数,像"0123"这样的数会变成123,丢失前导零,而题目要求范围是0000-9999,所以字符串格式才完全符合要求。
  3. 如果不想允许前导零怎么办?:可以稍微调整逻辑,先从1-9里选第一个数字,再从剩下的9个数字(包括0)里选3个:
    def get_nonzero_start_4digit():
        first_digit = random.randint(1, 9)
        remaining_digits = random.sample([d for d in range(10) if d != first_digit], 3)
        all_digits = [first_digit] + remaining_digits
        return ''.join(map(str, all_digits))
    

另外,真心不推荐用“生成随机4位数然后检查是否有重复数字”的方法——比如循环生成random.randint(0, 9999),然后转成4位字符串检查重复,这种方法在接近所有可能的无重复4位数(总共有10×9×8×7=5040个)时,会频繁生成重复的数,效率极低,完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:37:29