如何让for循环中的random.choice每次运行输出一致且迭代取值不同
问题原因
你之前的写法每次迭代都新建了一个种子为500的随机数生成器实例,所有实例的初始状态完全一致,第一次调用choice()返回的结果自然完全相同,才会出现每次迭代取值一样的问题。
解决方法
仅初始化一次带固定种子的随机数生成器实例,在生成器中复用该实例即可,完整实现代码如下:
import random from itertools import repeat # 待随机选择的列表 x = [1, 2, 3, 4, 5] # 全局仅初始化一次带固定种子的随机数生成器 rng = random.Random(500) # 生成器中复用上述实例,不会每次重置随机状态 df = (rng.choice(x) for i in repeat(0)) # 测试输出前5个结果:每次运行脚本输出序列完全一致,且序列内取值随机 for _ in range(5): print(next(df))
实现逻辑
带固定种子的随机数生成器实例会自行维护内部状态,每调用一次随机方法(如choice()、randint()等)就会向后推进一次伪随机序列。只要种子固定,整个序列的取值就是固定的,既保证了运行结果可复现,也能满足每次迭代取不同随机值的需求。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

