使用 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
我正在尝试组合一个代码,以组合方式将给定输入字符串中的唯一字符替换为字典中的相应值,同时保留 '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