Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设定是否确定?_Python - Fatal编程技术网

Python 设定是否确定?

Python 设定是否确定?,python,Python,当你阅读这些问题时,如你所看到的备注,顺序是不能保留的 这是可以理解的。困扰我的是它走得更远——正如我所看到的,执行甚至不是确定性的,即: list(set(values_list)) 我会得到唯一的值,问题是每次运行结果的顺序不同。因此这意味着集(构造函数或枚举器)不是确定性的 我想知道这是怎么发生的?我看不出为什么在单线程执行(?)时会出现非确定性行为 当然,可以对结果进行排序以强制执行确定性行为,但一旦您观察到手头有非确定性代码,就可以得到这样的想法 更新: 我的代码的精髓——该文件是一

当你阅读这些问题时,如你所看到的备注,顺序是不能保留的

这是可以理解的。困扰我的是它走得更远——正如我所看到的,执行甚至不是确定性的,即:

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

我想知道这是怎么发生的?我看不出为什么在单线程执行(?)时会出现非确定性行为

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

更新:

我的代码的精髓——该文件是一个包含10000个字符串(具有3个唯一值)的数组的pickle


每次跑步我都会得到不同的顺序。哦,我使用的是Python 3.6.4。

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

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

到目前为止,我没有发现这个问题:

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

集合是无序的。因此,将集合转换为列表并不能保证每次都有相同的结果。要澄清的是,这个问题:“为什么集合构造函数是非确定性的?”@mkrieger1但这并不意味着每次都是随机的。除非是:你能举个例子吗?当我尝试时,
list(set(values))
总是以相同的顺序进行游戏(用随机数列表测试,都是3.6和2.7)@Joel,因为答案同样适用于dicts和set。set是无序的。因此,将集合转换为列表并不能保证每次都有相同的结果。要澄清的是,这个问题:“为什么集合构造函数是非确定性的?”@mkrieger1但这并不意味着每次都是随机的。除非是:你能举个例子吗?当我尝试时,
list(set(values))
总是以相同的顺序进行游戏(用随机数列表测试,分别为3.6和2.7)@Joel,因为答案同样适用于dicts和set。这是巧合。“我连续两次得到相同的结果”不是确定性行为的证明。在什么版本的Python上…?@deceze OP没有指定任何特定的版本,但指定了版本。这是巧合。“我连续两次得到相同的结果”不是确定性行为的证明。在什么版本的Python上…?@deceze OP没有指定任何特定的版本,而是指定了版本。