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

新手上路,请多包涵

我知道如何在 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 出现了两次。

原文由 Chris Headleand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 856
2 个回答

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

 >>> 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

原文由 Two-Bit Alchemist 发布,翻译遵循 CC BY-SA 3.0 许可协议

先生成数据范围,然后像这样洗牌

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

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

但是您可以使用 random.sample 从这样的数字范围中获取所需的元素数量

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

原文由 thefourtheye 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题