我正在尝试编写一个随机选择数字并将它们添加到列表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)
输出变化,但几乎总是列表具有多次相同的整数。有人可以帮忙吗?
答案 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次并不会改变再次获得它的可能性。
所以你实际上并不想要随机性。您希望在某种程度上控制输出的行为。
我建议保留另一个已经插入到数组中的整数列表,如果生成的最新的整数是你已经拥有的,那么产生另一个随机数,以便希望这次得到另一个。