【问题标题】:Generate list of 3 numbers with a maximum of 2 duplicates生成最多 2 个重复的 3 个数字的列表
【发布时间】:2020-05-19 03:43:44
【问题描述】:

如何在 0 到 5(含)之间生成 3 个随机数,其中最多可以有效地重复 2 个

所以我可以生成的列表可以是:

a = [0, 4, 2]
b = [5, 1, 4]
c = [5, 5, 3]
d = [2, 3, 2]

它无法生成如下列表:

a = [4, 4, 4]

【问题讨论】:

    标签: python python-3.x random


    【解决方案1】:

    我建议创建一个不超过 2 个重复项的列表并对其进行抽样:

    import random
    
    numbers = list(range(6)) * 2
    print(random.sample(numbers, 3))
    

    【讨论】:

    • 如果我们有一个预定义的列表,比如["bob", "john", "mike", "sam", "james", "ross"]
    • 只是将列表翻倍?我在示例中生成的列表与您的预定义列表有什么不同,这没有什么神奇的原因?
    【解决方案2】:

    首先创建一个包含 3 个随机数的列表,然后在所有 3 个相同的情况下循环,例如更改最后一个数字。

    import random
    
    lst = [random.randint(0, 5) for __ in range(3)]
    
    while lst[0] == lst[1] == lst[2]:
        lst[2] = random.randint(0, 5) 
    

    如果您有预定义的选择列表(如您对其他问题的评论),想法是相同的,只有其他功能(choice()choices())用于随机选择:

    import random
    
    predefined = ["bob", "john", "mike", "sam", "james", "ross"] 
    
    lst = random.choices(predefined, k=3)
    
    while lst[0] == lst[1] == lst[2]:
        lst[2] = random.choice(predefined)
    

    一些输出(lst 的值):

    ['mike', 'bob', 'mike']
    ['sam', 'sam', 'ross']
    ['ross', 'mike', 'james']
    ['james', 'bob', 'ross']
    ['james', 'sam', 'mike']
    ['sam', 'mike', 'james']
    ['sam', 'john', 'sam']
    

    【讨论】:

      【解决方案3】:

      这是解决这个问题的一种比较幼稚的方法:

      import random
      while True:
          rand = [random.randint(0, 5) for x in range(0, 3)]
          if len(set(rand)) > 1:
              break
      print rand
      

      我们生成一个包含 0 到 5 之间的三个随机值的列表,然后转换为一个集合,如果集合中有多个唯一值,我们退出循环。

      【讨论】:

        【解决方案4】:
        1. 设置列表:[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5]

        2. 随机播放列表。

        3. 从随机列表中取出前三个数字。

        为了提高效率,您只需在第 2 步运行 Fisher-Yates shuffle 的前三个步骤。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-22
          相关资源
          最近更新 更多