【问题标题】:Unshuffling a shuffled string解开打乱的字符串
【发布时间】:2015-12-27 04:15:25
【问题描述】:

在 python 中学习随机性和洗牌真的很有趣。但是,我使用以下代码对字符串进行了洗牌:

string = "Shuffling in Python"
q = ''.join([str(w) for w in random.sample(string, len(string))])

现在,我已经打乱了字符串,那么我该如何解开它以恢复原始字符串?

【问题讨论】:

  • string 是未洗牌的版本。如果您可以反转随机性,那将不是很随机
  • 不相关,但我建议不要使用string 作为变量名,因为它也是标准库中模块的名称。

标签: python python-3.x


【解决方案1】:

如果没有原始字符串的一些痕迹,您真的无法做到这一点。因此,如果您使用原始索引(可以使用enumerate 获得),那么您可能能够撤消(仍然不是反向)改组:

In [18]: s = "Shuffling in Python"

In [19]: shuffled = random.sample(list(enumerate(s)), len(s))

In [20]: ''.join([e[1] for e in shuffled])
Out[20]: 'igf nfSonhult iPhyn'

In [21]: ''.join(s[e[0]] for e in shuffled)
Out[21]: 'igf nfSonhult iPhyn'

In [22]: ''.join([e[1] for e in sorted(shuffled, key=lambda x:x[0])])
Out[22]: 'Shuffling in Python'

【讨论】:

    【解决方案2】:

    你不能。原始顺序不保留,正确的随机洗牌不是可逆操作。

    就像任何字母的随机集合一样,查找具有这些特定字母的其他单词需要您搜索所有可能的有效单词,并且您可以找到多种解决方案。

    不是您需要来解开这些字母。 x 中仍有原始字符串,但您从未删除该变量,因此您仍然可以引用原始字符串。

    【讨论】:

      猜你喜欢
      • 2015-05-02
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2011-11-26
      • 2011-04-26
      • 2023-01-03
      相关资源
      最近更新 更多