在阅读诸如Get unique values from a list in python之类的问题时,您会看到这些注释不能保留顺序。
这是可以理解的。令我感到困惑的是它的作用更进一步-正如我所看到的那样,执行甚至不是确定性的,即:
list(set(values_list))
我将获得唯一的值,问题是每次运行时结果的顺序都不同。因此,这意味着set
(构造函数或枚举数)不是确定性的。
我想知道这是怎么发生的?我看不出在单线程执行(?)时会出现不确定性行为的原因。
当然,可以对结果进行排序以强制执行确定性行为,但是一旦您发现手头有不确定性代码,就可以得到这种想法。
更新:
我的代码的精髓-该文件是一个包含1万个字符串数组(具有3个唯一值)的泡菜。
combined = pickle.load(open("labels.p", "rb"))
label_keys = list(set(combined))
print(label_keys)
每次运行都会得到不同的顺序。哦,我使用的是Python 3.6.4。
答案 0 :(得分:-4)
到目前为止,我还没有看到这个问题:
>>> values_list = range(100) * 3
>>> a = list(set(values_list))
>>> b = list(set(values_list))
>>> a == b
True
>>>