字符串与特定变量字符的组合

Rob*_*ert 2 python string

如何收集字符串的组合,其中某些字符(但不是全部)是可变的?

换句话说,我有一个输入字符串和一个字符映射.字符映射指定哪些字符是可变的,以及它们可以替换的内容.然后该函数产生所有可能的组合.

为了说明这一点,我正在尝试收集可能被OCR引擎误解的OCR输出字符串的可能变体.

输入示例:

"ABCD"
Run Code Online (Sandbox Code Playgroud)

示例字符映射:

dict(
    B=("X", "Z"),
    D=("E")
)
Run Code Online (Sandbox Code Playgroud)

预期产量:

[
    "ABCD",
    "ABCE",
    "AXCD",
    "AXCE",
    "AZCD",
    "AZCE"
]
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 5

你可以使用itertools.product:

>>> from itertools import product
>>> s = "ABCD"
>>> d = {"B": ["X", "Z"], "D": ["E"]}
>>> poss = [[c]+d.get(c,[]) for c in s]
>>> poss
[['A'], ['B', 'X', 'Z'], ['C'], ['D', 'E']]
>>> [''.join(p) for p in product(*poss)]
['ABCD', 'ABCE', 'AXCD', 'AXCE', 'AZCD', 'AZCE']
Run Code Online (Sandbox Code Playgroud)

请注意,我创建d["D"]了一个列表而不是简单的字符串以保持一致性.