在范围内生成“n”个唯一随机数

2024-10-01 15:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

random.randint(numLow, numHigh)

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

for x in range (0, n):
    listOfNumbers.append(random.randint(numLow, numHigh))

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

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

所以

[12,5,6,1]=良好

但是

[12,5,5,1]=错误,因为数字5出现了两次。


Tags: 方法in列表for错误range数字random
3条回答

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

>>> import random
>>> random.sample(range(1, 100), 3)
[77, 52, 45]

random.sample获取总体和样本大小k,并返回总体的k随机成员。

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

>>> try:
...   random.sample(range(1, 2), 3)
... except ValueError:
...   print('Sample size exceeded population size.')
... 
Sample size exceeded population size

先生成数据范围,然后按如下方式乱序

import random
data = range(numLow, numHigh)
random.shuffle(data)
print data

通过这样做,您将得到特定范围内的所有数字,但顺序是随机的。

但是,您可以使用^{}从如下一系列数字中获取所需元素的数量

print random.sample(range(numLow, numHigh), 3)

您可以添加到^{}中,直到达到n

setOfNumbers = set()
while len(setOfNumbers) < n:
    setOfNumbers.add(random.randint(numLow, numHigh))

请注意,范围要小于n中的范围。它将永远循环,找不到新的数字插入到n

相关问题 更多 >

    热门问题