Python-random.seed()使用笔记

Python-random.seed()使用笔记

考虑下面一道试题:

import random
y=[i for i in range(10)]
random.seed(0)  
#下面用一行代码实现选取y中的一个元素
z=______
print(z)

此题考察对random.seed()方法的理解。
如果不加考虑直接填充空行为:

z=random.choice(y)

每次执行的结果都是:

6

如果想每次执行的结果不同应该怎么办呢?
网上有文章说第一次执行random.choice()是确定值,后面就恢复随机性了,真的如此吗?把空行改为:

z=[random.choice(y) for i in range(10)]

可以发现每次执行后的z都是:

[6, 6, 0, 4, 8, 7, 6, 4, 7, 5]

这说明执行random.seed(0) 后,random.choice()不再能随机选取y中的一个元素了,其它方法也失去了随机性,比如把空行改为:

z=random.sample(y,3)

可以发现每次执行后的结果都是:

[6, 9, 0]

把空行改为:

z =[random.random() for i in range(5)]

每次执行后的结果都是:

[0.8444218515250481, 0.7579544029403025, 0.420571580830845, 0.25891675029296335, 0.5112747213686085]

还是要回到random.seed()方法,要再执行一次random.seed(),
让random模块恢复随机性,这样就可以真正随机选取y中一个元素了,
如何在一行代码中完成这个功能呢?
使用带条件过滤的列表推导式可以完成,即

z=[random.choice(y) for i in range(1) if random.seed()==None][0]

这样就做到了每次执行后的z都不同。

你可能感兴趣的:(python)