fue*_*zig 2 python random set random-seed
我有以下代码
import random
random.seed(42)
mylist = set(["A", "B", "C", "D", "E", "F", "G", "H"])
tn = random.sample(mylist, 4)
print(tn)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我希望这总是打印相同的结果。但是,在每次连续运行时,它都会返回不同的 4 个字母序列。后来我发现它在删除时是稳定的set(在这个最小的例子中,除了触发问题之外没有其他用途)。
为什么有人会set以不确定的方式实施?我可以想象它的实现可能需要(伪)随机数,但即便如此,我还是希望我的程序仍然是确定性的,即使使用set. 我还注意到这是依赖于版本的:
Python版本:
如何使用set并仍然获得可重现的输出?在采样之前使用排序mylist是sorted有效的,但是您必须对在(天真的)空操作之后再次排序的列表进行排序是非常不直观的。
您的期望是直观的,但它不是语言规范的一部分。
哈希机制 set未指定;Python 实现不需要重现哈希映射——或使用任何机制。它可能取决于最近的存储使用情况、可用位置、系统时间或月相。
如果您对“作品”的个人定义需要可重现的映射,那么您有责任提供自己的映射,或使用支持这种稳定性的语言工具。排序并没有给你设定的稳定性; 它用排序列表替换集合。