在Python中,如何每次在循环中生成唯一的单个随机数?
我知道有一些类似的问题,但它们都只是返回一个列表,我只需要一个数字,每次随机生成一个唯一的数字: 现在我正在使用Python构建一个循环:在Python中,如何每次在循环中生成唯一的单个随机数?,python,python-3.x,loops,random,Python,Python 3.x,Loops,Random,我知道有一些类似的问题,但它们都只是返回一个列表,我只需要一个数字,每次随机生成一个唯一的数字: 现在我正在使用Python构建一个循环: for _ in range(9): random_number=random.randint(1,11) print(random_number) 我的问题是如何确保每次随机数都是唯一的,而不是全部9次重复。 我不需要一个列表,只需要随机数。如果你想让每个数字都是唯一的,你不希望每次都有一个真正的随机数(事实上,一个小集合
for _ in range(9):
random_number=random.randint(1,11)
print(random_number)
我的问题是如何确保每次随机数都是唯一的,而不是全部9次重复。
我不需要一个列表,只需要随机数。如果你想让每个数字都是唯一的,你不希望每次都有一个真正的随机数(事实上,一个小集合中的随机数是唯一的是不可能的)。我会这样做:
numbers = list(range(1, 12))
random.shuffle(numbers)
for random_number in numbers[:9]:
print(random_number)
本质上,这就像拿一副牌,洗牌,然后发前九张牌。你会得到九张“随机”牌,但它们永远不会重复,因为它们来自同一副牌,并且你不会在交易之间重新洗牌(因此它们不是真正随机的,这就是为什么计算牌数是一件事).您可以在目标数字范围内使用
random.sample
,从中选择所需数量的唯一数字:
import random
for random_number in random.sample(range(1, 12), 9):
print(random_number)
random.sample
绝对是一种方法,但另一种方法是初始化列表中的所有数字,然后一次随机弹出一个:
import random
numbers = list(range(1, 12))
for _ in range(9):
random_index = random.randint(0, len(numbers)-1)
selected_rn = numbers.pop(random_index)
这有一个很好的解释:一个预定义的数字序列,您可以多次指向它,然后随机获取一个数字 检查该数字是否已被使用,如果不是唯一的,则再次滚动该随机数。生成一个序列号列表,将其洗牌,然后简单地从头到尾迭代。@PM77-1,将答案作为答案而不是注释发布。@Jim-我想提供指导-而不是答案。听起来你可能已经找到了这样做的方法,洞察可能是在数字列表上循环,而不是在每次迭代中独立地生成一个新值。如果有人想调查Sam的附加注释,请查阅“生日悖论”。哦,直到它存在!谢谢,这就是我想要的!