python中的排列组合
Permutations and combination in python
我正在处理一个 OCR 用例,并从混淆矩阵中识别出常见的错误分类,例如:“1”被混淆为 'J',“2”被混淆为 'Z' 和 'J'.
对于给定的单词,我正在尝试创建一个 python 脚本,该脚本将创建所有排列,从而解释所有错误分类。
示例:
- 常见错误分类:{'1':['J'],'2':['Z','J']}
- 输入:“AB1CD2”
- 输出:AB1CD2、AB1CDZ、ABJCD2、ABJCDZ、AB1CDJ、ABJCDJ
我该如何解决这个问题?
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)
我正在处理一个 OCR 用例,并从混淆矩阵中识别出常见的错误分类,例如:“1”被混淆为 'J',“2”被混淆为 'Z' 和 'J'.
对于给定的单词,我正在尝试创建一个 python 脚本,该脚本将创建所有排列,从而解释所有错误分类。
示例:
- 常见错误分类:{'1':['J'],'2':['Z','J']}
- 输入:“AB1CD2”
- 输出:AB1CD2、AB1CDZ、ABJCD2、ABJCDZ、AB1CDJ、ABJCDJ
我该如何解决这个问题?
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)