重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天就跟大家聊聊有关Python中怎么整理DNA序列,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
乌拉特后网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
给定一堆DNA序列,即由字符A, C, G, T组成的字符串,统计所有长度为n的子序列出现的频率。比如 ACGTACGT,子序列长度为2,于是 AC=2, CG=2, GT=2, TA=1,其余长度为2的子序列频率为0.
***想到的就是建一个字典,key是所有可能的子序列,value是这个子序列出现的频率。但是当子序列比较长的时候,比如 n=8,需要一个有65536 (4的8次方) 个key-value pair的字典,且每个key的长度是8字符。这样ms有点浪费内存。。
于是想到,所有的长度为n的子序列是有序且连续的,所以可以映射到一个长度为4的n次方的的list里。令 A=0, C=1, G=2, T=3,则把子序列 ACGT 转换成 0*4^3 + 1*4^2 + 2*4 + 3 = 27, 映射到list的第27位。如此,list的index对应子序列,而list这个index位置则储存这个子序列出现的频率。
于是我们先要建立2个字典,Python统计表示ACGT和0123一一对应的关系:
i2mD = {0:'A', 1:'C', 2:'G', 3:'T'} m2iD = dict(A=0,C=1,G=2,T=3) # This is just another way to initialize a dictionary
以及下面的子序列映射成整数函数:
def motif2int(motif): '''convert a sub-sequence/motif to a non-negative integer''' total = 0 for i, letter in enumerate(motif): total += m2iD[letter]*4**(len(motif)-i-1) return total Test: >>> motif2int('ACGT') 27
看完上述内容,你们对Python中怎么整理DNA序列有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。