我正在尝试组合一个代码,以组合方式将给定输入字符串中的唯一字符替换为字典中的相应值,同时保留“非”唯一字符的位置。
例如,我有以下字典:
d = {'R':['A','G'], 'Y':['C','T']}
如何替换“R”和“Y”的所有实例,同时生成字符串的所有可能组合但保持“A”和“C”的位置?
例如,输入“ARCY”将生成以下输出:
'AACC'
'AGCC'
'AACT'
'AGCT'
希望这是有道理的。如果有人能指出正确的方向,那就太好了!
最佳答案
给定字典,我们可以声明一个规则,告诉我们在输出中的给定位置可能出现哪些字母。如果输入的原始字母在字典中,我们使用该值;否则,只有一种可能性——原始字母本身。我们可以非常简洁地表达:
def candidates(letter):
d = {'R':['A','G'], 'Y':['C','T']}
return d.get(letter, [letter])
知道每个字母的候选项(我们可以通过 map
ping 我们的 candidates
函数到模式中的字母上),我们可以创建候选项的笛卡尔积, 并通过简单地 ''.join
ing 将每个结果(这是一个单字母字符串的元组)折叠成一个字符串。
def substitute(pattern):
return [
''.join(result)
for result in itertools.product(*map(candidates, pattern))
]
让我们测试一下:
>>> substitute('ARCY')
['AACC', 'AACT', 'AGCC', 'AGCT']
关于python - 使用 multidict 的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960420/