使用 multidict 的排列

Permutations using a multidict

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

例如,我有以下词典:

d = {'R':['A','G'], 'Y':['C','T']}

如何替换 'R' 和 'Y' 的所有实例,同时生成字符串的所有可能组合但保持 'A' 和 'C' 的位置?

例如,输入 'ARCY' 将生成以下输出:

'AACC'
'AGCC'
'AACT'
'AGCT'

希望这是有道理的。如果有人能指出正确的方向,那就太好了!

ARCY 更改为多个列表并使用以下代码:

import itertools as it
list = [['A'], ['A','G'],['C'],['C','T']]
[''.join(item) for item in it.product(*list)]

import itertools as it
list = ['A', 'AG','C', 'CT']
[''.join(item) for item in it.product(*list)]

以下 generator function produces all of your desired strings, using enumerate, zip, itertools.product, a list comprehension and argument list unpacking 所有这些都非常方便 Python tools/concepts 您应该继续阅读:

from itertools import product

def multi_replace(s, d):
    indexes, replacements = zip(*[(i, d[c]) for i, c in enumerate(s) if c in d])
    # indexes: (1, 3)
    # replacements: (['A', 'G'], ['C', 'T'])

    l = list(s)  # turn s into sth. mutable
    # iterate over cartesian product of all replacement tuples ...
    for p in product(*replacements):  
        for index, replacement in zip(indexes, p):
            l[index] = replacement
        yield ''.join(l)

d = {'R': ['A', 'G'], 'Y': ['C', 'T']}
s = 'ARCY'

for perm in multi_replace(s, d):
    print perm

AACC
AACT
AGCC
AGCT

s = 'RRY'

AAC
AAT
AGC
AGT
GAC
GAT
GGC
GGT