[英]Creating a list of random numbers without duplicates in python
所以我想做的是为游戏策划者创建一个包含 5 个数字的列表,我想消除所有重复项! 问题是代码有时会创建一个包含 3 个数字或 4 个或有时 5 个数字的列表,它似乎是随机的。
我还要提一下,我们不允许使用 grandom.sample 或 random.shuffle
import random
def generatePassword() :
lis = []
for i in range(5) :
#This checks to see if there are duplicate numbers
r = random.randint(1,9)
if r not in lis :
lis.append(r)
i+=1
return lis
def main() :
print(generatePassword())
main()
如果您正在寻找有效且更快的方法,请使用numpy.random.permutation
:
import numpy as np
your_list = list(np.random.permutation(np.arange(0,10))[:5])
>>> your_list
[6, 9, 0, 1, 4]
或者,您可以将np.random.choice
与replace=False
一起使用:
your_list = list(np.random.choice(np.arange(0,10), 5, replace=False)
尝试使用带有检查 lis 长度的条件的 while 循环
while len(lis) < 5:
而不是你的 for 循环
函数random.sample
做你想做的事:
import random
def generatePassword():
numbers = range(0, 9)
return random.sample(numbers, 5)
def main() :
print(generatePassword())
main()
我不推荐这个答案中的解决方案 - 标准库中的最佳选择可能是random.sample
,并且可能有更有效的方法使用 numpy。 在其他答案中建议了这两个选项。
此方法使用random.shuffle
随机播放数字列表,然后选择前五个。 这避免了理论上无界循环的问题( while len(nums) < 5:
),但是当可供选择的数字范围(此处为 1 到 9)明显大于所需的数字数量时(在这里,5)。
import random
population = list(range(1, 10))
random.shuffle(population)
print(population[:5])
您不想添加 5 次随机的唯一整数; 您想添加随机的唯一整数,直到您的列表包含 5 个元素。 这会做到:
import random
def generatePassword() :
lis = []
while len(lis) < 5:
#This checks to see if there are duplicate numbers
r = random.randint(1,9)
if r not in lis :
lis.append(r)
return lis
所以你的问题:它不会两次添加相同的数字。 但是由于您使用 a for i in range(5):
它只会重复 5 次,无论它是否添加了唯一数字。
您需要测量列表的长度,因此它总是会在列表中添加 5 个随机的、唯一的数字。
你的代码大部分是正确的,但你需要做的就是替换: for i in range(5):
with: while len(lis) < 5:
确保删除i += 1
。 如果不这样做会导致错误。
这是代码:
import random
def generatePassword() :
lis = []
while len(lis) < 5:
#This checks to see if there are duplicate numbers
r = random.randint(1,9)
if r not in lis :
lis.append(r)
return lis
def main() :
print(generatePassword())
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.