Vu *_*yen 0 python random debugging 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))
Run Code Online (Sandbox Code Playgroud)
下面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
Run Code Online (Sandbox Code Playgroud)
你其实是不正确的。Python 3 返回同一组数字。您假设set每次执行 python 时无序容器都将具有相同的顺序,这是不正确的。
例如,对于最后两个 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
Run Code Online (Sandbox Code Playgroud)
sets您可以使用以下方式确保您的订单正确无误sorted
print(', '.join(sorted(test)))
Run Code Online (Sandbox Code Playgroud)