如何生成不同的随机数字?

可能重复:
随机挑选N件物品

我需要在1到49之间生成6个随机数,但它们不能相同。 我知道如何让他们随机,我只是不知道如何确保他们是不同的。

工作表build议显示每个数字,并将其设置为零,但我不明白这会有什么帮助。

任何build议,不胜感激。

你可以使用random.sample

 >>> random.sample(xrange(1,50), 6) [26, 39, 36, 46, 37, 1] 

“工作表build议显示每个数字,并将其设置为零,但我不明白这将如何帮助。”

假设这是一个任务,你需要自己实现抽样,你可以看看random.sample是如何实现的 。 这是非常有用的信息,但是对于您的需求可能太复杂了,因为代码还可以确保所有子片也是有效的随机样本。 为了提高效率,还根据人口规模使用不同的方法。

至于工作表,我相信它假设你从一个从1到49的数字列表开始,并build议你用0代替你select的数字,这样如果重新select就可以跳过。 这里有一些伪代码来帮助你开始:

人口=范围(1,50)#从1到49的数字列表
 sample = []
直到我们拿到6个样本:
   index =从0到48的随机数#look up random.randint()
  如果人口[指数]不是0:#如果我们发现一个没有标记的值
    追加人口[指数]进行抽样
    设置人口[索引] = 0#标记选中

如果你想尝试一些不同的东西,还有很多其他的方法可以考虑,例如随机化列表然后截取,或者某种forms的油藏采样 。

祝你好运。

set不会保留任何重复:

 s = set() while len(s) < 6: s.add(get_my_new_random_number()) 

这是一个非常普遍和愚蠢的访谈问题,这里是它的解决scheme/algorithm:

 import random a = range(1,50) for i in xrange(6): b = a[random.randint(0,len(a)-i)] a.remove(b) print b 

对于那些关心效率的人来说,这是我的解决scheme和Chin的testing平台:

 >>> random.sample(xrange(1,50), 6) [26, 39, 36, 46, 37, 1] 

结果:

 >python -mtimeit -s'import try2' [38, 7, 31, 24, 30, 32] 100000000 loops, best of 3: 0.0144 usec per loop >python -mtimeit -s'import try1' 36 26 41 31 37 14 100000000 loops, best of 3: 0.0144 usec per loop 

解决的是同一时间!