我想从随机生成器生成循环,并且没有重复的值,如下所示:
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))
关于如何解决此问题的任何想法? 任何回应都表示赞赏。
答案 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