2024-09-30 06:11:55 发布
网友
我有一个列表a=[num1,num2,...,numn]。我正在用random.shuffle(a)洗牌。然而,作为一个功能,我想要的是shuffle算法将一个键作为输入,并且该键的所有者确定地产生相同的shuffle?你知道吗
a=[num1,num2,...,numn]
random.shuffle(a)
我想要一个算法,作为输入的关键,元素序列要洗牌,它输出一个随机排列,这取决于关键。如果在同一个数据序列上再次应用shuffle并输入相同的键,则得到相同的结果。否则随机洗牌。同一数据上的同一个键允许“取消洗牌”
有可能吗?你知道吗
在伪随机术语中,该键称为种子,您可以在新的random.Random()实例上设置随机种子:
random.Random()
def keyed_shuffle(x, seed=None): random_obj = random.Random(seed) random_obj.shuffle(x)
您也可以直接使用^{}和^{},但是使用您自己的random.Random()实例可以避免在random模块使用的单例random.Random()实例上设置种子,因此不会影响该模块的其他使用。你知道吗
random
种子可以是整数(直接使用)或任何可哈希对象。你知道吗
演示:
>>> a = [10, 50, 42, 193, 21, 88] >>> keyed_shuffle(a) # no seed >>> a [42, 10, 88, 21, 50, 193] >>> a = [10, 50, 42, 193, 21, 88] >>> keyed_shuffle(a) # again no seed, different random result >>> a [88, 50, 193, 10, 42, 21] >>> b = [10, 50, 42, 193, 21, 88] >>> keyed_shuffle(b, 42) # specific seed >>> b [193, 50, 42, 21, 10, 88] >>> b = [10, 50, 42, 193, 21, 88] >>> keyed_shuffle(b, 42) # same seed used, same output >>> b [193, 50, 42, 21, 10, 88] >>> c = [10, 50, 42, 193, 21, 88] >>> keyed_shuffle(b, 81) # different seed, different random order >>> c [10, 50, 88, 42, 193, 21]
在伪随机术语中,该键称为种子,您可以在新的
random.Random()
实例上设置随机种子:您也可以直接使用^{} 和^{} ,但是使用您自己的
random.Random()
实例可以避免在random
模块使用的单例random.Random()
实例上设置种子,因此不会影响该模块的其他使用。你知道吗种子可以是整数(直接使用)或任何可哈希对象。你知道吗
演示:
相关问题 更多 >
编程相关推荐