如何创建不重复的随机数列表

新手上路,请多包涵

我尝试使用 random.randint(0, 100) ,但有些数字是相同的。是否有创建唯一随机数列表的方法/模块?

注意:以下代码 基于答案,并在发布答案后添加。这不是问题的一部分;这是解决方案。

 def getScores():
    # open files to read and write
    f1 = open("page.txt", "r");
    p1 = open("pgRes.txt", "a");

    gScores = [];
    bScores = [];
    yScores = [];

    # run 50 tests of 40 random queries to implement "bootstrapping" method
    for i in range(50):
        # get 40 random queries from the 50
        lines = random.sample(f1.readlines(), 40);

原文由 iCodeLikeImDrunk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 855
2 个回答

这将返回从 0 到 99 范围内选择的 10 个数字的列表,没有重复。

 import random
random.sample(range(100), 10)

参考您的特定代码示例,您可能希望从文件中读取所有行 _一次_,然后从内存中保存的列表中选择随机行。例如:

 all_lines = f1.readlines()
for i in range(50):
    lines = random.sample(all_lines, 40)

这样,您只需要在循环之前从文件中实际读取一次。这样做比回溯到文件的开头并在每次循环迭代中再次调用 f1.readlines() 效率更高。

原文由 Greg Hewgill 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以像这样使用 random 模块中的 shuffle 函数:

 import random

nums = list(range(1, 100)) # list of integers from 1 to 99
                           # adjust this boundaries to fit your needs
random.shuffle(nums)
print(nums) # <- List of unique random numbers

请注意,shuffle 方法不会像人们预期的那样返回任何列表,它只会打乱通过引用传递的列表。

原文由 Ricardo Murillo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题