对一个随机数进行抽样,直到它在集合中不存在,还有什么更优雅的方法?

2024-05-13 18:47:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: inimage版本ifdeftypenp情况
1条回答
网友
1楼 · 发布于 2024-05-13 18:47:31

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

from random import shuffle
unused_values = list(range(7))
shuffle(unused_values)

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

random_type = unused_values.pop()

相关问题 更多 >