生成无重复数字的随机数

时间:2018-10-05 15:06:36

标签: python

我想从随机生成器生成循环,并且没有重复的值,如下所示:

1,4
1,2
1,3
1,1
1,7
1,9
1,8
2,5
2,2
2,1
2,3
2,4
2,5
2,7

我的意思是,对于每个第一个值,第二个值上都没有重复的值。第二个值的取值范围是(1到10)。

我下面的代码仍然提供重复的值:

import random
for i in range(2):
    for j in range(7):
        print(i, ',', random.randint(1,10))

关于如何解决此问题的任何想法? 任何回应都表示赞赏。

4 个答案:

答案 0 :(得分:1)

只需使用random.sample,它是从总体中生成非重复随机元素的内置方法:

from random import sample

for i in range(1, 3):
    for j in sample(list(range(1, 11)), 7):
        print(i, ',', j)
        # 7 random non-repeating `j` from [1, 2, ..., 10]

要从整个可能的对对中抽取14个随机元素,可以将其与itertools.product组合:

from itertools import product

sample_pairs = sample(list(product(range(1, 3), range(1, 11))), 14)
#[(2, 10),
# (1, 1),
# (2, 7),
# (2, 9),
# (1, 10),
# (2, 5),
# (1, 2),
# (1, 9),
# (2, 4),
# (2, 3),
# (2, 2),
# (1, 8),
# (2, 8),
# (1, 6)]

答案 1 :(得分:0)

生成产品列表,然后将其随机排序。它会在元组中包含唯一值

from itertools import product
from random import shuffle
my_list= list((i,j) for i,j in product([1,2],range(1,10)) if i!=j)
shuffle(my_list)
print(my_list[:14]) # just pick random 14 pairs which are not duplicate

更正您的代码以检查重复项。尽管操作员费用昂贵

import random
intial_range=range(2)
for i in intial_range:
    count=0
    while count<7:
        temp = random.randint(1,10)
        if(temp not in intial_range):
            print(i, ',', temp)
            count+=1

答案 2 :(得分:-1)

import random

for i in range(2):
    j = 0
    nums = []
    while j != 7:
        num = random.randint(1,10)
        if num not in nums:
            print(i+1, ',', num)
            nums.append(num)
            j+=1

答案 3 :(得分:-2)

我建议制作一个空数组,然后将数字附加到数组中,否则通过

喜欢这个:

import random
my_numbers = []

for i in range(5):
    x = random.randint(0,19)
    if x not in my_numbers:
        my_numbers.append(x)
    else:
        pass