我想知道什么是更优雅的(如果这个词在这种情况下是合适的)方法来继续生成一个随机数,直到它不在使用的值集中。第一个选项是重复的,因为我们random type在 while 循环内部和外部都有相同的行。
然而,第二个需要添加一个条件语句来跳出循环。我知道这个特殊情况是微不足道的,两个版本都可以工作,但是在您看来哪个看起来更 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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
既然你无论如何都要记住一些东西,那么反其道而行之,记住没用的东西会更容易。这解决了几个问题:你永远不需要重复随机生成,一个列表就足够了,所以你不会得到一个集合的内存开销。
from random import shuffle
unused_values = list(range(7))
shuffle(unused_values)
Run Code Online (Sandbox Code Playgroud)
然后每当你需要一个新的非重复随机数时,
random_type = unused_values.pop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |