如何生成不同的随机数字?
可能重复:
随机挑选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
解决的是同一时间!