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

我想知道是什么更优雅(如果这个词在这种情况下合适)继续生成随机数的方法,直到它不在使用的值集中。第一个选项是重复的,因为我们在 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)

循环


翻过高山走不出你
浏览 109回答 1
1回答

慕婉清6462132

由于无论如何你都必须做一些记忆,所以走相反的道路更容易,记住未使用的东西。这解决了几个问题:你永远不需要重复随机生成,一个列表就足够了,所以你不会得到一个集合的内存开销。from random import shuffleunused_values = list(range(7))shuffle(unused_values)然后每当你需要一个新的非重复随机数时,random_type = unused_values.pop()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python