Python 对一个随机数进行采样,直到它';她不在场吗?
我想知道什么是更优雅的(如果这个词在这种情况下合适的话)方法来不断生成一个随机数,直到它不在所使用的值集中。第一个选项是重复的,因为while循环内外的Python 对一个随机数进行采样,直到它';她不在场吗?,python,loops,Python,Loops,我想知道什么是更优雅的(如果这个词在这种情况下合适的话)方法来不断生成一个随机数,直到它不在所使用的值集中。第一个选项是重复的,因为while循环内外的random type都有相同的行 然而,第二个需要添加一个条件语句来打破循环。我知道这个特殊情况很简单,两个版本都可以工作,但在您看来,哪个版本看起来更Python/优雅 def orchestrator(image = None): used_values = set() for _ in range(7):
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)
因为你无论如何都要做一些记忆,所以相反的方法更容易,记住没有用过的东西。这解决了几个问题:您永远不需要重复随机生成,并且一个列表就足够了,这样您就不会得到集合的内存开销
from random import shuffle
unused_values = list(range(7))
shuffle(unused_values)
然后每当你需要一个新的非重复随机数
random_type = unused_values.pop()
如果您只想生成从1到7的数字,唯一且不需要替换,为什么不只生成
random.shuffle(范围(1,7))
或其他任何数字?注意:如果您的问题不是生成非重复的随机数字,而是关于中间循环中断
是否比重复代码更可取,我会投票支持break
变得枯燥和可读性越来越高,有些人会说break
永远是一个令人憎恶的东西——这是一个观点问题的完美例子,在你说“计算机编程的艺术”之前,它就会被关闭。
random_type = unused_values.pop()