如何编写只重复一次随机数的代码?

时间:2017-05-03 17:18:20

标签: python python-2.7 python-3.x

这是我到目前为止所做的:

import random
for x in range(10):
    tickets = [random.sample(range(0,59), 6)]
    print (tickets)

但我需要这样做,以便生成的所有数字都不同,除了两个相同的数字。

这就是我的问题,并希望在星期五之前获得帮助!这是我被要求参考的问题:"我的新年决心是赢得彩票。要做到这一点,我每周会买10张票。我会为每张票随机选择6个号码。数字范围从1到59.除了需要复制的数字之外,所有数字只能使用一次。在python中编写一个程序来模拟这个。"

1 个答案:

答案 0 :(得分:1)

您可以通过跟踪已使用过的数据并在以后的样本中禁止重复数字来避免重复数字:

import random

def non_repeating_random_sample(population, k, seen):
    while True:
        sample = random.sample(population, k)
        if not any(number in seen for number in sample):
            seen.union(sample)
            return sample

seen = set()
for _ in range(10):
    tickets = [non_repeating_random_sample(range(0, 59), 6, seen)]
    print(tickets)

当做这样的事情时,重要的是要理解返回的样本 - 除了第一个样本 - 由于额外的限制而不是真正随机的。

无论如何,只是改变整个群体,然后从中提取所需大小的群组会更简单,更快捷:

import random

number_of_samples = 10
number_per_sample = 6

samples = list(range(number_of_samples*number_per_sample))
random.shuffle(samples)

generator = zip(*[iter(samples)]*number_per_sample)
for _ in range(number_of_samples):
    print(list(next(generator)))