首页 > 解决方案 > 有没有办法使用 Python 替换序列列表中的第一个和最后三个字符?

问题描述

我正在尝试使用 Python 替换将被发送用于合成的序列列表中的某些字符。有问题的字符是每个序列的第一个和最后三个。我也试图在每个字符之间添加一个 * 。

棘手的部分是第一个和最后一个字符需要与其他两个不同。

例如:DNA 序列 TGTACGTTGCTCCGAC 需要更改为/52MOErT/*/i2MOErG/*/i2MOErT/*A*C*G*T*T*G*C*T*C*C*/i2MOErG/*/i2MOErA/*/32MOErC/

第一个字符需要是 /52MOEr_/,最后一个字符需要是 /32MOEr_/,其中 _ 是该索引处的字符。对于上面的示例,第一个是 T,最后一个是 C。另外两个,GT 和 GA 需要 /i2MOEr_/ 修改。

到目前为止,我已经使用该.split()函数将序列转换为列表。最终结果是 ['AAGTCTGGTTAACCAT', 'AATACTAGGTAACTAC', 'TGTACGTTGCTCCGTC', 'TGTAGTTAGCTCCGTC']。我已经玩了一段时间,但我觉得我需要一些指导。

这不像我想象的那么容易吗?

标签: pythonpython-3.xbioinformatics

解决方案


您可以只使用分治算法。这是我实现目标的解决方案。

dna = "TGTACGTTGCTCCGAC"
dnaFirst3Chars = '/52MOEr' + dna[0] + '/*/i2MOEr' + dna[1] + '/*/i2MOEr' + dna[2] + '/*'
dnaMiddle = '*'.join(dna[3:-3])
dnaLast3Chars = '*/i2MOEr' + dna[-3] + '/*i2MOEr' + dna[-2] + '/*/32MOEr' + dna[-1] + '/'

dnaTransformed = dnaFirst3Chars + dnaMiddle + dnaLast3Chars

print(dnaTransformed)

输出:

/52MOErT/*/i2MOErG/*/i2MOErT/*A*C*G*T*T*G*C*T*C*C*/i2MOErG/*i2MOErA/*/32MOErC/

更新:

为简单起见,您可以将上述代码转换为如下函数:

def dna_transformation(dna):
    """ Takes a DNA string and returns the transformed DNA """

    dnaFirst3Chars = '/52MOEr' + dna[0] + '/*/i2MOEr' + dna[1] + '/*/i2MOEr' + dna[2] + '/*'
    dnaMiddle = '*'.join(dna[3:-3])
    dnaLast3Chars = '*/i2MOEr' + dna[-3] + '/*i2MOEr' + dna[-2] + '/*/32MOEr' + dna[-1] + '/'

    return dnaFirst3Chars + dnaMiddle + dnaLast3Chars

print(dna_transformation("TGTACGTTGCTCCGAC")) # call the function

输出: /52MOErT/*/i2MOErG/*/i2MOErT/*A*C*G*T*T*G*C*T*C*C*/i2MOErG/*i2MOErA/*/32MOErC/


推荐阅读