【问题标题】:In Python - How to generate random numbers without repetition [duplicate]在 Python 中 - 如何在不重复的情况下生成随机数 [重复]
【发布时间】:2017-09-22 18:26:04
【问题描述】:

我有几行生成随机数的代码,如何停止生成重复数?

import random
num = random.randrange(0,1000)
x = 13


while num != x :
    num = random.randrange(0 , 14)

    print(num)

【问题讨论】:

  • 使用集合来存储数字。
  • 如果可以使用numpynumbers = numpy.random.choice(range(1000), however_many_numbers_you_want, replace=False)

标签: python python-3.x


【解决方案1】:

如果每个数字只能选择一次,这就相当于随机排序列表并一次选择一个数字

import random

desired_number = 13
guesses = range(0,14)
random.shuffle(guesses)

current_guess = None

while current_guess != desired_number:
    current_guess = guesses.pop()
    print(current_guess)

【讨论】:

    【解决方案2】:

    存储生成的数字,并对照此列表检查每个新数字。

    随着要检查的列表变长,性能不会很好,但至少你不会有重复。

    另一种方法是从 1..n 生成一个数字列表,将数字打乱,然后迭代该列表以获得下一个唯一的随机数。

    >>> import random
    >>> l = list(range(4))
    >>> random.shuffle(l)
    >>> l
    [3, 2, 4, 1]
    

    【讨论】:

    • 或者作为字典,以数字为键,无为值。然后,如果你想查找一个新生成的数字,你所要做的就是看看:new_number in dict
    • @Ben:这是一套。
    • @quamrana 好点!我已经习惯了使用 dicts,以至于我完全忘记了集合。套装是这里更好的方式。
    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2012-10-23
    • 1970-01-01
    • 2017-03-29
    • 2014-05-01
    • 2011-01-05
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多