【问题标题】:Getting original sequence from a random permutation in python从python中的随机排列中获取原始序列
【发布时间】:2021-06-05 06:23:29
【问题描述】:

有没有办法从 python 中的随机排列中取回原始序列?

比如原来的序列是p1=[4,1,8,2,3]

生成的随机排列是p2=[8,3,1,4,2]

有没有办法使用p2找回p1

编辑:抱歉,我的问题似乎不清楚

我必须在我无法访问 p1 的不同程序中使用 p2 取回 p1

例如,

import random
p1=[4,1,8,2,3]
p2=p1[:]
random.seed(10)
random.shuffle(p2)
print(p2)  #prints [2, 8, 1, 4, 3]

有没有办法在我无法访问p1 的不同程序中使用p2 找回p1

【问题讨论】:

  • 随机排列生成 - 如何生成?另外,注意 sequence 不一定是有序的。无论如何-如果它真的是随机的,我不知道您将如何获得原始的,或者两者之间的链接不是随机的。
  • 如果您知道排列的“索引”,则可以对原始序列进行逆向工程
  • 既然你已经有了p1,我真的不明白使用p2重新构造相同列表的新方法

标签: python permutation


【解决方案1】:

不确定您要在这里实现什么。但本质上,您需要一个结构来跟踪 p1 元素的原始位置

您可以使用dict 来实现它

p1 = [4,1,8,2,3]
p2 = [8,3,1,4,2]
refHash_p1 = {k:i for i,k in enumerate(p1)}

p3 = sorted(p2,key=lambda x:refHash_p1[x])

>>> p3
[4, 1, 8, 2, 3]

【讨论】:

    【解决方案2】:

    除非您还知道以一种或另一种抽象方式应用的随机排列,否则不会出现在 example cycle notation 中。否则,您将如何区分来自 p1 的 p2 或来自 [1,2,3,4,8] 的 p2

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多