python中的排列组合

Permutations and combination in python

我正在处理一个 OCR 用例,并从混淆矩阵中识别出常见的错误分类,例如:“1”被混淆为 'J',“2”被混淆为 'Z' 和 'J'.

对于给定的单词,我正在尝试创建一个 python 脚本,该脚本将创建所有排列,从而解释所有错误分类。

示例:

我该如何解决这个问题?

itertools product 应该有帮助

from itertools import product
misclass = {'1':['J'],'2':['Z','J']}
misclass_items = [tuple([k, *v]) for k, v in misclass.items()]
print(["AB" + x + "CD" + y for (x, y) in list(product(*misclass_items))])
# ['AB1CD2', 'AB1CDZ', 'AB1CDJ', 'ABJCD2', 'ABJCDZ', 'ABJCDJ']

通过使用包含所有可能分类的字典,而不仅仅是所有 mis 分类,您可以获得一个简洁的解决方案。也就是说,您首先用所有可能的正确分类“丰富”您的错误分类字典。

from itertools import product

all_characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
common_misclass = {'1':['J'],'2':['Z','J']}
input_string = "AB1CD2"

common_class = {}
for char in all_characters:
    if char in common_misclass:
        common_class[char] = [char] + common_misclass[char]
    else:
        common_class[char] = [char]

possible_outputs = ["".join(tup) for tup in 
    product(*[common_class[letter] for letter in input_string])]

print(possible_outputs)