为了账号安全,请及时绑定邮箱和手机立即绑定

对随机数进行采样直到它不存在于集合中的更优雅的方法是什么?

对随机数进行采样直到它不存在于集合中的更优雅的方法是什么?

翻过高山走不出你 2022-08-02 16:05:22
我想知道是什么更优雅(如果这个词在这种情况下合适)继续生成随机数的方法,直到它不在使用的值集中。第一个选项是重复的,因为我们在 while 循环内部和外部都有相同的行。random type但是,第二个需要添加一个条件语句来中断循环。我知道这种特殊情况是微不足道的,两个版本都可以工作,但是在您看来,哪个看起来更Python/优雅?def orchestrator(image = None):    used_values = set()    for _ in range(7):        toss = np.random.random()        if toss >= 0.5:            random_type = np.random.randint(1,7,1)[0]            while random_type in used_values:                random_type = np.random.randint(1,7,1)[0]            used_values.add(random_type)            print(random_type)def orchestrator(image = None):    used_values = set()    for _ in range(7):        toss = np.random.random()        if toss >= 0.5:            while True:                random_type = np.random.randint(1,7,1)[0]                if random_type not in used_values:                    break            used_values.add(random_type)            print(random_type)蟒循环
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

由于无论如何你都必须做一些记忆,所以走相反的道路更容易,记住未使用的东西。这解决了几个问题:你永远不需要重复随机生成,一个列表就足够了,所以你不会得到一个集合的内存开销。


from random import shuffle

unused_values = list(range(7))

shuffle(unused_values)

然后每当你需要一个新的非重复随机数时,


random_type = unused_values.pop()


查看完整回答
反对 回复 2022-08-02
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信