Python中的键控随机洗牌

2024-09-30 06:11:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表a=[num1,num2,...,numn]。我正在用random.shuffle(a)洗牌。然而,作为一个功能,我想要的是shuffle算法将一个键作为输入,并且该键的所有者确定地产生相同的shuffle?你知道吗

我想要一个算法,作为输入的关键,元素序列要洗牌,它输出一个随机排列,这取决于关键。如果在同一个数据序列上再次应用shuffle并输入相同的键,则得到相同的结果。否则随机洗牌。同一数据上的同一个键允许“取消洗牌”

有可能吗?你知道吗


Tags: 数据功能算法元素列表序列random关键
1条回答
网友
1楼 · 发布于 2024-09-30 06:11:55

在伪随机术语中,该键称为种子,您可以在新的random.Random()实例上设置随机种子:

def keyed_shuffle(x, seed=None):
    random_obj = random.Random(seed)
    random_obj.shuffle(x)

您也可以直接使用^{}^{},但是使用您自己的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]

相关问题 更多 >

    热门问题