首页 > 解决方案 > 集合是确定性的吗?

问题描述

在阅读诸如Get unique values from a list in python之类的问题时,您可以看到无法保留订单的备注。

这是可以理解的。让我烦恼的是它走得更远——我可以看到执行甚至不是确定性的,即:

list(set(values_list))

我会得到唯一的值,问题是每次运行的结果都会有不同的顺序。所以这意味着set(构造函数或枚举数)不是确定性的。

我想知道它是怎么发生的?我看不出为什么在单线程执行时(?)你会得到不确定的行为。

当然,可以对结果进行排序以强制执行确定性行为,但是一旦您观察到手头有非确定性代码,您就会得到这样的想法。

更新:

我的代码的本质——该文件是一个包含 10 000 个字符串(具有 3 个唯一值)的数组的泡菜。

combined = pickle.load(open("labels.p", "rb"))
label_keys = list(set(combined))
print(label_keys)

在每次运行时,我都会得到不同的顺序。哦,我使用 Python 3.6.4。

标签: python

解决方案


到目前为止我还没有看到这个问题:

>>> values_list = range(100) * 3
>>> a = list(set(values_list))
>>> b = list(set(values_list))
>>> a == b
True
>>> 

推荐阅读