欢迎光临散文网 会员登陆 & 注册

【ROSALIND】【练Python,学生信】36 k-mer组成列表

2020-01-26 15:12 作者:未琢  | 我要投稿

如果第一次阅读本系列文档请先移步阅读【ROSALIND】【练Python,学生信】00 写在前面  谢谢配合~

题目:

k-Mer组成(k-Mer Composition)

Given: A DNA string s in FASTA format (having length at most 100 kbp).

所给:长度不超过100kb的一条DNA序列s,以FASTA给出。

Return: The 4-mer composition of s.

需得:s的4-mer组成列表。

 

测试数据

>Rosalind_6431

CTTCGAAAGTTTGGGCCGAGTCTTACAGTCGGTCTTGAAGCAAAGTAACGAACTCCACGG

CCCTGACTACCGAACCAGTTGTGAGTACTCAACTGGGTGAGAGTGCAGTCCCTATTGAGT

TTCCGAGACTCACCGGGATTTTCGATCCAGCCTCAGTCCAGTCTTGTGGCCAACTCACCA

AATGACGTTGGAATATCCCTGTCTAGCTCACGCAGTACTTAGTAAGAGGTCGCTGCAGCG

GGGCAAGGAGATCGGAAAATGTGCTCTATATGCGACTAAAGCTCCTAACTTACACGTAGA

CTTGCCCGTGTTAAAAACTCGGCTCACATGCTGTCTGCGGCTGGCTGTATACAGTATCTA

CCTAATACCCTTCAGTTCGCCGCACAAAAGCTGGGAGTTACCGCGGAAATCACAG

测试输出

4 1 4 3 0 1 1 5 1 3 1 2 2 1 2 0 1 1 3 1 2 1 3 1 1 1 1 2 2 5 1 3 0 2 2 1 1 1 1 3 1 0 0 1 5 5 1 5 0 2 0 2 1 2 1 1 1 2 0 1 0 0 1 1 3 2 1 0 3 2 3 0 0 2 0 8 0 0 1 0 2 1 3 0 0 0 1 4 3 2 1 1 3 1 2 1 3 1 2 1 2 1 1 1 2 3 2 1 1 0 1 1 3 2 1 2 6 2 1 1 1 2 3 3 3 2 3 0 3 2 1 1 0 0 1 4 3 0 1 5 0 2 0 1 2 1 3 0 1 2 2 1 1 0 3 0 0 4 5 0 3 0 2 1 1 3 0 3 2 2 1 1 0 2 1 0 2 2 1 2 0 2 2 5 2 2 1 1 2 1 2 2 2 2 1 1 3 4 0 2 1 1 0 1 2 2 1 1 1 5 2 0 3 2 1 1 2 2 3 0 3 0 1 3 1 2 3 0 2 1 2 2 1 2 3 0 1 2 3 1 1 3 1 0 1 1 3 0 2 1 2 2 0 2 1 1

 

生物学背景

        有关k-mer的介绍请参考23 按字母顺序排列的K-mer。k-mer组成(k-Mer Composition)是指每个k-mer在某序列中出现频率组成的列表,1-mer组成列表就相当于这条序列的GC含量,2-mer,3-mer和4-mer分别又被叫作二核苷酸,三核苷酸和四核苷酸组成(di-nucleotide, tri-nucleotide, and tetra-nucleotide compositions)。K-mer在物种鉴定、编码区鉴定以及序列拼接等多种序列分析过程中扮演重要的角色。

        将一条序列所有的k-mer按照字母顺序排列,其对应的出现频率也可以写成一个数组,这个数组就是这条序列的k-mer组成。

 

思路

        我将这个问题划分为两部分依次解决。

        第一部分:得到所有的4-mer,这里写一个排列函数,用循环的方法得到4-mer;

        第二部分:统计4-mer出现的频率,只需扫描序列,依次与每个4-mer比较即可。

 

代码

def perm(l1, l2):
   
"""用来进行排列的函数"""
   
i = 0
   
p = []
   
while i < len(l1):
        j =
0
       
while j < len(l2):
            temp = l1[i] + l2[j]
            p.append(temp)
            j +=
1
       
i += 1
   
return p


f =
open('input.txt', 'r')
input = f.readlines()
f.close()
index = input[
0].replace('\n', '')
input = input[
1:]
i =
0
seq = ''
while i < len(input):
    seq = seq + input[i].replace(
'\n', '')
    i +=
1

symbol = ["A", "C", "G", "T"]
fourmers = symbol
i =
1
while len(fourmers) < 4 ** 4: # 用循环的方法得到4-mer,用4-mer自身的数量控制循环
   
fourmers = perm(symbol,fourmers)


count = [
0] * len(fourmers) # count存储4-mer组成
i = 0
while i < len(seq):
    temp = seq[i:i+
4] # 逐个扫描序列
   
j = 0
   
while j < len(fourmers):
       
if temp == fourmers[j]: # 与4-mer比较
           
count[j] += 1
           
break
       
j += 1
   
i += 1

i = 0
f = open('output.txt', 'a')
while i < len(count):
   
# print(str(count[i]), end=' ')
   
f.write(str(count[i]) + ' ')
    i +=
1

f.close()


【ROSALIND】【练Python,学生信】36 k-mer组成列表的评论 (共 条)

分享到微博请遵守国家法律