Python3中奇怪的随机种子行为

时间:2016-06-25 17:08:59

标签: python debugging random set

即使使用random.seed(myseed),输出设置数字也不会给出相同的序列。这只发生在Python3中,而不是Python2中(在Debian稳定系统上)。我的代码是错误还是错误?

import random
seed=20.0
random.seed(seed)
print("seed: {}".format(seed))
test = [str(random.randint(0,1000)) for _ in range(10)]
print(', '.join(test))
ss = set(test)
print(', '.join(ss))

Python3下面在每次运行时给出了不同的序列,但Python2在所有运行中给出了类似的序列(如预期的那样)。

$ python3 --version
Python 3.4.2
$ python2 --version
Python 2.7.9

#same sequences
$ python2 randtest.py 
seed: 20.0
906, 686, 767, 905, 260, 636, 905, 873, 573, 169
906, 636, 905, 573, 767, 873, 260, 169, 686

$ python2 randtest.py 
seed: 20.0
906, 686, 767, 905, 260, 636, 905, 873, 573, 169
906, 636, 905, 573, 767, 873, 260, 169, 686

$ python2 randtest.py 
seed: 20.0
906, 686, 767, 905, 260, 636, 905, 873, 573, 169
906, 636, 905, 573, 767, 873, 260, 169, 686

#diff sequences
$ python3 randtest.py 
seed: 20.0
927, 740, 702, 805, 784, 901, 926, 154, 266, 690
926, 690, 784, 702, 740, 927, 266, 154, 901, 805

$ python3 randtest.py 
seed: 20.0
927, 740, 702, 805, 784, 901, 926, 154, 266, 690
702, 926, 784, 901, 154, 266, 805, 690, 740, 927

$ python3 randtest.py 
seed: 20.0
927, 740, 702, 805, 784, 901, 926, 154, 266, 690
805, 926, 901, 784, 740, 927, 154, 690, 266, 702

1 个答案:

答案 0 :(得分:3)

你实际上是不正确的。 Python 3返回相同的数字集。您假设每次执行不正确的python时set无序容器将具有相同的顺序。

例如,对于最后两个python3测试:

>>> a = set([702, 926, 784, 901, 154, 266, 805, 690, 740, 927])
>>> b = set([805, 926, 901, 784, 740, 927, 154, 690, 266, 702])
>>> a == b
True

您可以使用sets

确保正确排序sorted
print(', '.join(sorted(test)))