Python统计如何进行DNA序列整理

开发 后端
Python统计在广泛的应用中有不少的问题出现,下面我们就来详细的看看Python统计如何进行DNA序列的整理。希望大家有所收获。

Python统计在我们的使用中有很多的障碍,其中在DNA序列上的相关问题就需要我们不断的去学习。下面我们就向大家介绍有关的问题,希望在以后Python统计的使用过程中有所收获。

给定一堆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一一对应的关系:

  1. i2mD = {0:'A', 1:'C', 2:'G', 3:'T'}  
  2. m2iD = dict(A=0,C=1,G=2,T=3)  
  3. # This is just another way to initialize a dictionary 

以及下面的子序列映射成整数函数:

 

  1. def motif2int(motif):  
  2. '''convert a sub-sequence/motif to a non-negative integer'''  
  3. total = 0 
  4. for i, letter in enumerate(motif):  
  5. total += m2iD[letter]*4**(len(motif)-i-1)  
  6. return total  
  7. Test:  
  8. >>> motif2int('ACGT')  
  9. 27 

以上就是对Python统计的相关介绍。虽然我们内部把子序列当成正整数来存储(确切地说,其实这个整数是没有存在内存里的,而是由其在list的index表示的),为了方便生物学家们看,输出时还是转换回子序列比较好。

【编辑推荐】

  1. Python字符串如何进行代码替换
  2. Python输入方式具体的三种实现方式
  3. Python编程语言维和受到众人的追捧
  4. Python编程语言具有相当高的适应能力
  5. Python字符串替换如何才能进行字符的拆分
责任编辑:张浩 来源: IT专家网
相关推荐

2010-03-10 15:41:39

Python序列

2022-07-17 07:37:29

微服务DDD工程化落地

2010-03-15 09:47:43

Python DNA序

2010-02-03 13:55:51

Python 代码

2010-02-22 16:05:40

Python配置

2010-02-01 10:21:36

Python编码转换

2024-07-08 08:38:37

Python游戏开发

2010-02-01 18:20:17

Python 多重继承

2010-02-02 16:47:12

Python主线程

2010-03-11 17:38:20

Python中文

2010-03-15 15:11:50

Python列表

2010-02-01 14:48:43

2010-02-01 17:33:24

Python主线程

2019-05-21 14:22:28

Android渠道统计打包

2010-03-01 11:06:52

Python 调试器

2010-02-01 16:22:36

Python字符串操作

2010-03-15 15:45:15

Python编程语言

2010-03-01 16:32:36

Python语言

2010-02-22 17:12:34

Python对象

2010-03-09 18:14:55

Python sock
点赞
收藏

51CTO技术栈公众号