如何生成唯一的随机数(不重复)?

时间:2018-02-05 19:04:14

标签: python for-loop random

我正在尝试编写一个随机选择数字并将它们添加到列表random_numbers的代码,但是如果已经生成了一个随机数,则代码会检测到该数字并将该数字替换为另一个数字,直到每个数字为止是不同的。

import random
random_numbers = []
for x in range(11):

此部分生成一个随机整数,并将其附加到列表random_numbers

    random_numbers.append('[q' + str(random.randint(1, 11)) + ']')

这部分应该遍历列表并检查生成的随机数是否已经生成,并替换它:

    for item in range(len(random_numbers)):
        if random_numbers[x] == random_numbers[item]:
            random_numbers[x] = '[q' + str(random.randint(1, num_of_qs_in_file)) + ']'

print(random_numbers)

输出变化,但几乎总是列表具有多次相同的整数。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

一种直接的方式来做非重复的随机' (psudeorandom)适度范围内的整数是使用range(1, n)创建一个列表,然后random.shuffle()列表,然后使用pop()或者a从列表中获取任意数量的数字切片。

import random

max = 11
l = list(range(1, max))  # the cast to list is optional in Python 2
random.shuffle(l)

现在,每当您想要一个随机数时,只需l.pop()

另一种方法是使用random.sample() - 请参阅https://docs.python.org/3/library/random.html

答案 1 :(得分:0)

这是一种有力的方式

import random as rd
random = rd.randint(1,20)
rdlist = []
for _ in range(10):
    while random not in rdlist:
        rdlist.append(random)
    while random in rdlist:
        random = rd.randint(1,20)

答案 2 :(得分:-1)

随机性是一个概念,大多数人认为这意味着“每次都不同”或类似的理解。

实际上,随机性很难定义,一般来说,无论如何都可以安全地假设你会看到重复。如果某些东西是真正随机的,它(算法)并不关心它是否重复。在创建新值时,它不关注先前的值。这是“随机”在编程世界中意味着什么的要点。

如果你掷骰子并获得4(1/6的机会),你有机会再获得4分?它仍然是1/6。获得4次并不会改变再次获得它的可能性。

所以你实际上并不想要随机性。您希望在某种程度上控制输出的行为。

我建议保留另一个已经插入到数组中的整数列表,如果生成的最新的整数是你已经拥有的,那么产生另一个随机数,以便希望这次得到另一个。