如何在Python中生成100个不重复随机数并添加至空set?
问题分析与解决方案
你的问题出在集合(set)的特性和随机数生成的随机性上:set会自动去重,当random.randint(0,101)生成重复数值时,s.add()不会给集合增加新元素。你固定循环200次是碰运气,但没法保证最终能凑够100个唯一元素——如果重复的次数多,循环结束后集合大小可能还是小于100。
下面给你两种可靠的解决方案:
方案一:循环直到集合满足大小要求
既然目标是拿到100个唯一随机数,我们可以直接循环,直到集合的长度达到100为止。因为你的取值范围是0到101(总共102个不同数值),完全可以凑够100个:
import random s = set() # 循环直到集合里有100个元素 while len(s) < 100: s.add(random.randint(0, 101)) print(s) print(len(s))
方案二:用random.sample直接获取不重复元素
更高效的方式是用random.sample(),它可以直接从一个序列中抽取指定数量的不重复元素,一步到位,不用循环试错:
import random # 生成0到101的所有数值的列表(共102个) all_candidates = list(range(0, 102)) # 随机抽取100个不重复的元素 selected_numbers = random.sample(all_candidates, 100) # 转成set(如果不需要set的特性,直接用列表也可以) s = set(selected_numbers) print(s) print(len(s))
这个方法逻辑更清晰,效率也更高,尤其是当取值范围明确且不大的时候。
额外说明
如果你的取值范围里的唯一数值数量小于你要抽取的数量(比如想从0-99里抽101个),那无论哪种方法都无法实现——因为没有足够多的唯一数。但你的场景里0-101有102个唯一数,所以完全能满足抽取100个的需求。
内容的提问来源于stack exchange,提问作者Kiran Patil
相关产品推荐
相关产品推荐

