【问题标题】:How to generate a unique single random number each time in a loop in Python?如何在Python的循环中每次生成一个唯一的单个随机数?
【发布时间】:2020-07-27 13:57:26
【问题描述】:

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

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

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

我的问题是如何确保每次 random_number 都是唯一的,而不是全部重复 9 次。 我不需要列表,只需要随机数

【问题讨论】:

  • 检查该数字是否已经被使用,如果它不是唯一的,则再次滚动随机数。
  • 生成一个序列号列表,打乱它,然后简单地从头到尾迭代。
  • @PM77-1,将答案作为答案发布,而不是作为 cmets。
  • @Jim - 我想提供指导 - 而不是答案。
  • 听起来您可能已经找到了这样做的方法,洞察力可能是循环遍历数字列表,而不是尝试每次迭代独立生成新值。

标签: python python-3.x loops random


【解决方案1】:

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)

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

【讨论】:

    【解决方案2】:

    您可以在目标号码范围内使用random.sample,从中选择所需数量的唯一号码:

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

    【讨论】:

    • 哦,直到这存在!
    • 谢谢,这就是我想要的!
    【解决方案3】:

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

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

    基本上,这就像拿一副牌,洗牌,然后处理前九张牌。你会得到九张“随机”牌,但它们永远不会重复,因为它们来自同一副牌,而且你不会在两次交易之间重新洗牌(因此它们不是真正随机的,这就是为什么算牌是一回事)。

    【讨论】:

    • 如果有人想调查 Sam 的附加评论,请查看“生日悖论”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多