将字符串中的字母转换为具有多个输出的不同字母

时间:2017-04-07 22:27:56

标签: python python-2.7 bioinformatics itertools

所以我有一个DNA序列

DNA = "TANNNT"

where N = ["A", "G", "C", "T"]

我希望得到TAAAAT, TAAAGT, TAAACT, TAAATT.....的所有可能输出,依此类推。

现在从网上我找到了我能做的排列解决方案 perms = [''.join(p) for p in permutations(N, 3)] 然后将我的DNA序列重复为 TA + perms + T

但我想知道是否有更简单的方法可以做到这一点,因为我有更多的DNA序列,并且需要花费更多的时间来硬编码。

修改

硬编码部分将如我所述

N1 = [''.join(p) for p in permutations(N, 1)]
N2 = [''.join(p) for p in permutations(N, 2)]
N3 = [''.join(p) for p in permutations(N, 3)]

然后在N3中为我做:

key = "TA" + N3[i] + "T"

由于我的序列很长,我不想计算序列中有多少连续N,并想知道是否有更好的方法来执行此操作。

1 个答案:

答案 0 :(得分:0)

您可以使用排列结果格式化字符串,如:

<强>代码:

import itertools as it
import re

def convert_sequence(base_string, target_letter, perms):
    REGEX = re.compile('(%s+)' % target_letter)
    match = REGEX.search(base_string).group(0)
    pattern = REGEX.sub('%s', base_string)
    return [pattern % ''.join(p) for p in it.permutations(perms, len(match))]

测试代码:

print(convert_sequence('TANNNT', 'N', ['A', 'G', 'C', 'T']))

<强>结果:

['TAAGCT', 'TAAGTT', 'TAACGT', 'TAACTT', 'TAATGT', 
 'TAATCT', 'TAGACT', 'TAGATT', 'TAGCAT', 'TAGCTT', 
 'TAGTAT', 'TAGTCT', 'TACAGT', 'TACATT', 'TACGAT', 
 'TACGTT', 'TACTAT', 'TACTGT', 'TATAGT', 'TATACT', 
 'TATGAT', 'TATGCT', 'TATCAT', 'TATCGT']