PYTHON上的简单LOTTERY算法

时间:2016-10-21 15:41:54

标签: algorithm python-3.x random

我想要不同的数字。我正在写一个小数字,例如(10)在范围内它没有问题,但如果我写一个大数字它不能工作。

import random
arr=[]

for i in range(25):
    a=random.randint(1,30)
    if a in arr:
        b=random.randint(1,30)
        arr.append(b)
    if a not in arr:
        arr.append(a)
arr.sort()
print(arr[0:])

2 个答案:

答案 0 :(得分:1)

嗯,对于彩票样本,你应该使用Fisher-Yates shuffle,这已经在random.shuffle函数中实现了。它是O(n)而不是你正在使用的O(n 2 )算法。

答案 1 :(得分:0)

你的方法的问题是,如果a在arr中,它会附加另一个随机数b,它可能与a相同。

我会使用以下方法:

random.sample(xrange(1,30), 25)

如果你真的想要一个循环,那么它应该是这样的:

arr=[]
for i in range(25):
    a=random.randint(1,30)
    while a in arr:
        a=random.randint(1,30)
    arr.append(a)
arr.sort()
print(arr[0:])