当阅读诸如此类的问题时从 python 中的列表中获取唯一值 https://stackoverflow.com/questions/12897374/get-unique-values-from-a-list-in-python可以看到订单的备注是可以不保留的。
这是可以理解的。让我烦恼的是它走得更远——正如我所看到的,执行甚至不是确定性的,即:
list(set(values_list))
我将获得唯一的值,问题是每次运行结果都会以不同的顺序排列。所以这意味着set
(构造函数或枚举器)不是确定性的。
我想知道这是怎么发生的?我不明白为什么在单线程执行时(?)你会得到不确定的行为。
当然,人们可以对结果进行排序以强制执行确定性行为,但是一旦您观察到手头有非确定性代码,您就可以得到这样的想法。
Update:
我的代码的本质——该文件是一个包含 10 000 个字符串数组(具有 3 个唯一值)的 pickle。
combined = pickle.load(open("labels.p", "rb"))
label_keys = list(set(combined))
print(label_keys)
每次运行我都会得到不同的订单。哦,我用的是Python 3.6.4。
到目前为止我还没有看到这个问题:
>>> values_list = range(100) * 3
>>> a = list(set(values_list))
>>> b = list(set(values_list))
>>> a == b
True
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)