首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在一个范围内生成'n‘个唯一的随机数

在一个范围内生成'n‘个唯一的随机数
EN

Stack Overflow用户
提问于 2014-04-03 23:29:57
回答 3查看 468.7K关注 0票数 299

我知道如何在Python中生成一个范围内的随机数。

代码语言:javascript
复制
random.randint(numLow, numHigh)

我知道我可以把这个放在一个循环中来生成n个这样的数字

代码语言:javascript
复制
for x in range (0, n):
    listOfNumbers.append(random.randint(numLow, numHigh))

但是,我需要确保该列表中的每个数字都是唯一的。除了大量的条件语句之外,有没有一种简单的方法来生成n个唯一的随机数?

重要的是,列表中的每个数字都是不同的。

所以

12、5、6、1=良好

12,5,5,1=坏,因为数字5出现了两次。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-03 23:34:46

如果您只需要采样而不需要替换:

代码语言:javascript
复制
>>> import random
>>> random.sample(range(1, 100), 3)
[77, 52, 45]

random.sample接受一个总体和一个样本大小k,并返回总体中的k个随机成员。

如果您必须控制k大于len(population)的情况,则需要准备好捕获ValueError

代码语言:javascript
复制
>>> try:
...   random.sample(range(1, 2), 3)
... except ValueError:
...   print('Sample size exceeded population size.')
... 
Sample size exceeded population size
票数 489
EN

Stack Overflow用户

发布于 2014-04-03 23:31:46

首先生成数据范围,然后像这样打乱它

代码语言:javascript
复制
import random
data = range(numLow, numHigh)
random.shuffle(data)
print data

通过这种方式,您将获得特定范围内的所有数字,但顺序是随机的。

但是,您可以使用random.sample从一系列数字中获取所需的元素数量,如下所示

代码语言:javascript
复制
print random.sample(range(numLow, numHigh), 3)
票数 30
EN

Stack Overflow用户

发布于 2014-04-03 23:32:46

在到达n之前,您可以添加到set

代码语言:javascript
复制
setOfNumbers = set()
while len(setOfNumbers) < n:
    setOfNumbers.add(random.randint(numLow, numHigh))

注意,范围要小于n所能容纳的范围。它将永远循环,无法找到要插入到n的新数字

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22842289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档