使用multidi的置换

2024-09-27 00:13:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,我有以下词典:

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

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

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

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

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


Tags: 实例字符串代码字典方式方向字符词典
2条回答

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使用^{}^{}^{}、a list comprehensionargument list unpacking生成所有需要的字符串,所有这些都是非常方便的Python工具/概念,您应该仔细阅读:

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

相关问题 更多 >

    热门问题