如何在Python中每次循环生成唯一的单个随机数?

问题描述 投票:0回答:4

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

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

for _ in range(9):
        random_number=random.randint(1,11)
        print(random_number)

我的问题是如何确保每次 random_number 都是唯一的,而不是在所有 9 次中重复。 我不需要列表,只需要 random_number

python python-3.x loops random
4个回答
6
投票

您可以在目标号码范围上使用

random.sample
从其中选择所需数量的唯一号码:

import random
for random_number in random.sample(range(1, 12), 9):
    print(random_number)

4
投票

如果您希望每个数字都与其他数字不同,那么您不希望每次都有一个真正的随机数(事实上,小集合中的随机数不太可能是唯一的)。 我会这样做:

numbers = list(range(1, 12))
random.shuffle(numbers)
for random_number in numbers[:9]:
    print(random_number)

本质上,这就像拿一副牌,将其洗牌,然后发出最上面的九张牌。 你会得到九张“随机”牌,但它们永远不会重复,因为它们来自同一副牌,并且你不会在交易之间重新洗牌(因此它们不是真正随机的,这就是为什么算牌是一件事).


2
投票

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)

这有一个很好的解释:一个预定义的数字序列,您可以多次指向它并随机抓取一个数字。


0
投票

每次运行代码时,都会使用 numpy 生成一个随机数

import numpy as np
np.random.sample(1)[0]

其他应用程序可以轻松添加到任何上下文中。例如,当定义范围时:

import numpy as np
each_time_new_random_number = np.random.sample(1)[0]

start = 5 
stop = 16

start + (stop-start)*each_time_new_random_number

顺风助你扬帆。

© www.soinside.com 2019 - 2024. All rights reserved.