【问题标题】:python random number generator for long list of numbers用于一长串数字的python随机数生成器
【发布时间】:2021-11-10 18:45:51
【问题描述】:

我想知道是否有人可以帮助我编写一个更好的程序。我的目标是制作一个随机数生成器,但它有非常具体的参数。我需要找到一个随机数,用于查找房屋组合中单元编号的随机数。参数在 101-112、114-125、128-149、201-230、232-263、265-280 和 300-305 之间。我为每个数字制作了一个列表,然后调用了随机数函数,但我只是想知道是否有更简单或更简洁的方法来制作这个程序。谢谢!

【问题讨论】:

    标签: python random


    【解决方案1】:

    为了确保您的选择是等概率的,您可以首先在权重等于每个范围中值的数量的范围中进行选择。 random.choices 允许您指定权重。

    然后您可以简单地选择所选范围内的任何值:

    import random
    
    def random_in_ranges(ranges):
        weights = [end - start + 1 for start, end in ranges]
        range_ = random.choices(ranges, weights=weights)[0]
        return random.randint(*range_)
    
    
    
    
    ranges = [(101,112), (114,125), (128,149), (201,230), (232,263), (265,280), (300,305)]
    print(random_in_ranges(ranges))
    # 262
    

    【讨论】:

      【解决方案2】:

      我认为你应该使用

      flat_num = random.choise(flats) 
      

      如果你的号码在某个 Iterable 结构中

      如果您只有这样的数字,您可以随机范围然后从选定范围中进行选择:

      flat_num = random.randint(
        *random.choice(
          [(101,112),(114,125),(128,149),(201-230),(232-263),(300-305)]
        )
      )
      
      

      【讨论】:

      • 为什么它经常发生在我身上——为什么有人减去我的答案?
      • 我很喜欢你的回答。
      • 这个选择根本不可能是等概率的。获得 301 的可能性是 201 的 5 倍。
      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2012-01-26
      相关资源
      最近更新 更多