python - 有没有办法使用 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']。我已经玩了一段时间,但我觉得我需要一些指导。
这不像我想象的那么容易吗?
解决方案
您可以只使用分治算法。这是我实现目标的解决方案。
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/
推荐阅读
- postgresql - postgres 创建扩展无效支持功能
- c - 如果我们将整数指针指向字符数组的开头并取消引用它会发生什么?
- java - Spring Web - AsyncHandlerInterceptor 中的两个连续 HTTP 请求,而 HTTP 500?
- python - 如何遍历我的数据系列并返回一个列表而不是单个值?
- arduino - 如何为此编写开关盒和串行读取?
- powershell - 是什么原因导致 Write-Host 颜色像这样执行?
- python - 骰子在 Python 上滚动统计数据
- javascript - 在 HTML Canvas 中更新分数的函数之外的其他函数中使用更新的分数时遇到问题
- php - Laravel 与多对多模型的关系
- sqlite - Flutter - 来自 SQLite 的 TextField 自动完成建议