python - 使用 multidict 的排列

标签 python dictionary cartesian-product

我正在尝试组合一个代码,以组合方式将给定输入字符串中的唯一字符替换为字典中的相应值,同时保留“非”唯一字符的位置。

例如,我有以下字典:

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])

知道每个字母的候选项(我们可以通过 mapping 我们的 candidates 函数到模式中的字母上),我们可以创建候选项的笛卡尔积, 并通过简单地 ''.joining 将每个结果(这是一个单字母字符串的元组)折叠成一个字符串。

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/

相关文章:

python - pygame Sprite 组绘制不绘制所有 Sprite

python - 在 Python 中加载本体

c# - 仅包含可序列化对象的字典

arrays - 笛卡尔幂(一种特殊的笛卡尔积)——以可重复的方式从数组中选择元素

python - Cython 和 distutils

jquery - python:html 编写器?

iphone - GPS 坐标(以度为单位)来计算距离

javascript - 按字典值排序后如何返回字典数组的新数组

java - 使用 Java 聚合两个层次树的笛卡尔积

python - 如何在不重复的情况下从笛卡尔积中采样