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

E. *_*ein 0 python random for-loop

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

import random
random_numbers = []
for x in range(11):
Run Code Online (Sandbox Code Playgroud)

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

    random_numbers.append('[q' + str(random.randint(1, 11)) + ']')
Run Code Online (Sandbox Code Playgroud)

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

    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)
Run Code Online (Sandbox Code Playgroud)

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

And*_*ter 5

在适度范围内执行非重复“随机”(伪随机)整数的一种直接方法是使用range(1, n),然后random.shuffle()使用列表创建一个列表,然后使用pop()或切片从列表中获取任意数量的数字。

import random

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

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

另一个是使用random.sample()——见https://docs.python.org/3/library/random.html