gpt4 book ai didi

python - 如何编写一个每次运行都给出相同输出的 Python 程序?

转载 作者:行者123 更新时间:2023-12-02 19:08:19 26 4
gpt4 key购买 nike

我有以下代码

import random

random.seed(42)

mylist = set(["A", "B", "C", "D", "E", "F", "G", "H"])
tn = random.sample(mylist, 4)
print(tn)

到目前为止,我预计这总是打印相同的结果。然而,每次连续运行它都会返回不同的 4 个字母序列。后来我发现删除 set 时它是稳定的(在这个最小的示例中,除了触发问题之外没有其他任何作用)。

为什么有人会以非确定性的方式实现set?我可以想象它的实现可能需要(伪)随机数,但即使如此,我还是希望我的程序仍然是确定性的,即使在使用 set 时也是如此。我还注意到这与版本相关:

Python 版本:

  • 2.7.12:稳定
  • 3.5.2:不同的输出
  • 3.6.12:不同的输出

如何使用 set 并仍然获得可重现的输出?在采样之前使用 sortedmylist 进行排序是可行的,但是您必须对在(天真的)空操作之后再次排序的列表进行排序,这是非常不直观的。

最佳答案

您的期望是直观的,但它不是语言规范的一部分。

未指定set的哈希机制; Python 实现不需要重现 HashMap ——或者使用任何机制。它可能取决于最近的存储使用情况、可用位置、系统时间或月相。

如果您对“作品”的个人定义需要可重复的映射,那么您有责任提供自己的映射,或使用支持这种稳定性的语言工具。排序不会给你设置稳定性;它用排序列表替换集合。

关于python - 如何编写一个每次运行都给出相同输出的 Python 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64725726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com