Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何每次在循环中生成唯一的单个随机数?_Python_Python 3.x_Loops_Random - Fatal编程技术网

在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次重复。 我不需要一个列表,只需要随机数。如果你想让每个数字都是唯一的,你不希望每次都有一个真正的随机数(事实上,一个小集合

我知道有一些类似的问题,但它们都只是返回一个列表,我只需要一个数字,每次随机生成一个唯一的数字:

现在我正在使用Python构建一个循环:

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的附加注释,请查阅“生日悖论”。哦,直到它存在!谢谢,这就是我想要的!