gpt4 book ai didi

python - 查找单词中字符替换的每个排列

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:12 26 4
gpt4 key购买 nike

虽然这似乎是一个已经有了答案的问题,但事实并非如此。

我正在尝试找到一种方法来执行以下操作:

  • 我有一个已知的字符串,例如“我爱狗”
  • 我有一堆可能的字符,例如“@!470”
  • 我有一堆字符应该替换为“已知字符串”,例如 s,e
  • 我想要一种方法来替换已知字符串“I Love dogs”中的每个交互,“可能的字符”中已知的 1 个单个字符,并让其他一切保持不变。
  • 完成后,开始一次替换 2 个字符
  • 完成后,开始一次替换 3 个字符
  • 依此类推,直到我没有更多“可能的字符”

下面描述了预期输出的示例:

  • 我知道字符串“这是我的字符串”
  • 我有一个可能的字符列表 "!$"
  • 我有字符可以替代"is"

首先,程序将通过更改 ! 中的每个 i 来继续,具有:

"Th!s !s my str!ng"

接下来,它会改变$中的s:

"Thi$ i$ my $tring"

现在我完成了 1 个字符的排列,我需要开始 2 个字符的排列:

"Th!$ !s my $tr!ng"

因为我只有一对,所以这里只有一种可能的排列,因此程序结束。

我试图弄清楚如何在 python 中执行此操作,但我最终只得到了一个无限列表“如果 .. 那么 ..”,并且必须有一种更有效的方法来执行此操作。

对于那些好奇的人,我对此很感兴趣,因为我“丢失”了我的密码。我的意思是,我的密码类似于“我喜欢冰淇淋”,​​但作为负责人,我用符号更改了一些字符,现在我不知道那是什么......

最佳答案

这并不能完全满足您的要求,但它可能会有所帮助:

from itertools import product

SUBSTITUTIONS = {
"i": "!1|",
"o": "0",
"s": "$5",
}

def sub(text):
possibilities = [c + SUBSTITUTIONS.get(c, "") for c in text]
# 'spoils' -> ['s$5', 'p', 'o0', 'i!1|', 'l', 's$5']
for subbed in product(*possibilities):
print("".join(subbed))

它使用 itertools.product()迭代 textSUBSTITUTIONS 的所有可能组合:

>>> sub('spoils')
spoils spoil$ spoil5 spo!ls spo!l$ spo!l5 spo1ls spo1l$ spo1l5
spo|ls spo|l$ spo|l5 sp0ils sp0il$ sp0il5 sp0!ls sp0!l$ sp0!l5
sp01ls sp01l$ sp01l5 sp0|ls sp0|l$ sp0|l5 $poils $poil$ $poil5
$po!ls $po!l$ $po!l5 $po1ls $po1l$ $po1l5 $po|ls $po|l$ $po|l5
$p0ils $p0il$ $p0il5 $p0!ls $p0!l$ $p0!l5 $p01ls $p01l$ $p01l5
$p0|ls $p0|l$ $p0|l5 5poils 5poil$ 5poil5 5po!ls 5po!l$ 5po!l5
5po1ls 5po1l$ 5po1l5 5po|ls 5po|l$ 5po|l5 5p0ils 5p0il$ 5p0il5
5p0!ls 5p0!l$ 5p0!l5 5p01ls 5p01l$ 5p01l5 5p0|ls 5p0|l$ 5p0|l5

为了紧凑,我重新格式化了输出,但你明白了。显然,候选密码的数量将随着替换次数的增加呈指数级增长,但您对此无能为力。

关于python - 查找单词中字符替换的每个排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29181987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com