如何收集某些字符(但不是全部)可变的字符串组合?
换句话说,我有一个输入字符串和一个字符映射。字符映射表指定哪些字符是可变的,以及可以替换哪些字符。然后该函数产生所有可能的组合。
为了说明这一点,我正在尝试为OCR引擎可能误解的OCR输出字符串收集可能的变化。
输入示例:
"ABCD"
字符映射示例:
dict(
B=("X", "Z"),
D=("E")
)
预期输出:
[
"ABCD",
"ABCE",
"AXCD",
"AXCE",
"AZCD",
"AZCE"
]
python大神给出的解决方案
您可以使用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']
请注意,为保持一致性,我将d["D"]
设置为列表而不是简单的字符串。