1. 背景
如题,这是《python生物信息学数据管理》的一道练习题。
2. 难点分析
计算碱基分别的频率并不难,关键是如何判定最高频碱基,然后将碱基和频率匹配打印。
3. 我的思路
我的第一想法是字典,原因有三:
第一,字典是包含了键和值的配对的。有了配对,可以很方便进行打印。
第二,字典支持排序,排序可以解决最值问题。
第三,字典支持按键或者键值进行索引,排序后通过索引很容易就能就能找到最高频碱基和与匹配的频率,并将其赋值给新对象,进而格式化输出。
以下是我想法的实现:
##python3.7.3
data = {}
with open('telomeraseCDS.txt', 'r') as file:
seq = file.read()
for i in "ATCG":
results = (seq.count(i)) / len(seq)
print("frequency of {}: {:.2%}" .format(i, results))
data.update({results: i}) #这里可以思考为什么不以i作为key
data_sorted = dict(sorted(data.items(), reverse = True)) #对字典进行降序排列并返回字典
fre_num, base_name = next(iter(data_sorted.items())) #获取第一个键及其键值,并赋值给新对象
print('highest frequency:{}:{:.2%}' .format(base_name, fre_num))
#计算GC含量
#我的思路是根据已有的字典,通过键值找到键。
#列表推导式可以实现这一想法:
GC_freq = [key for key, value in data_sorted.items()
if value == "G" or value == "C"] #列表推导式可以嵌套多个条件语句
GC_result = sum(GC_freq)
print('GC content:{:.2%}' .format(GC_result))
4.附录
4.1 telomeraseCDS.txt文件内容:
ATGCCGCGCGCTCCCCGCTGCCGAGCCGTGCGCTCCCTGCTGCGCAGCCACTACCGCGAGGTGCTGCCGC
TGGCCACGTTCGTGCGGCGCCTGGGGCCCCAGGGCTGGCGGCTGGTGCAGCGCGGGGACCCGGCGGCTTT
CCGCGCGCTGGTGGCCCAGTGCCTGGTGTGCGTGCCCTGGGACGCACGGCCGCCCCCCGCCGCCCCCTCC
TTCCGCCAGGTGTCCTGCCTGAAGGAGCTGGTGGCCCGAGTGCTGCAGAGGCTGTGCGAGCGCGGCGCGA
AGAACGTGCTGGCCTTCGGCTTCGCGCTGCTGGACGGGGCCCGCGGGGGCCCCCCCGAGGCCTTCACCAC
CAGCGTGCGCAGCTACCTGCCCAACACGGTGACCGACGCACTGCGGGGGAGCGGGGCGTGGGGGCTGCTG
CTGCGCCGCGTGGGCGACGACGTGCTGGTTCACCTGCTGGCACGCTGCGCGCTCTTTGTGCTGGTGGCTC
CCAGCTGCGCCTACCAGGTGTGCGGGCCGCCGCTGTACCAGCTCGGCGCTGCCACTCAGGCCCGGCCCCC
GCCACACGCTAGTGGACCCCGAAGGCGTCTGGGATGCGAACGGGCCTGGAACCATAGCGTCAGGGAGGCC
GGGGTCCCCCTGGGCCTGCCAGCCCCGGGTGCGAGGAGGCGCGGGGGCAGTGCCAGCCGAAGTCTGCCGT
TGCCCAAGAGGCCCAGGCGTGGCGCTGCCCCTGAGCCGGAGCGGACGCCCGTTGGGCAGGGGTCCTGGGC
CCACCCGGGCAGGACGCGTGGACCGAGTGACCGTGGTTTCTGTGTGGTGTCACCTGCCAGACCCGCCGAA
GAAGCCACCTCTTTGGAGGGTGCGCTCTCTGGCACGCGCCACTCCCACCCATCCGTGGGCCGCCAGCACC
ACGCGGGCCCCCCATCCACATCGCGGCCACCACGTCCCTGGGACACGCCTTGTCCCCCGGTGTACGCCGA
GACCAAGCACTTCCTCTACTCCTCAGGCGACAAGGAGCAGCTGCGGCCCTCCTTCCTACTCAGCTCTCTG
AGGCCCAGCCTGACTGGCGCTCGGAGGCTCGTGGAGACCATCTTTCTGGGTTCCAGGCCCTGGATGCCAG
GGACTCCCCGCAGGTTGCCCCGCCTGCCCCAGCGCTACTGGCAAATGCGGCCCCTGTTTCTGGAGCTGCT
TGGGAACCACGCGCAGTGCCCCTACGGGGTGCTCCTCAAGACGCACTGCCCGCTGCGAGCTGCGGTCACC
CCAGCAGCCGGTGTCTGTGCCCGGGAGAAGCCCCAGGGCTCTGTGGCGGCCCCCGAGGAGGAGGACACAG
ACCCCCGTCGCCTGGTGCAGCTGCTCCGCCAGCACAGCAGCCCCTGGCAGGTGTACGGCTTCGTGCGGGC
CTGCCTGCGCCGGCTGGTGCCCCCAGGCCTCTGGGGCTCCAGGCACAACGAACGCCGCTTCCTCAGGAAC
ACCAAGAAGTTCATCTCCCTGGGGAAGCATGCCAAGCTCTCGCTGCAGGAGCTGACGTGGAAGATGAGCG
TGCGGGACTGCGCTTGGCTGCGCAGGAGCCCAGGGGTTGGCTGTGTTCCGGCCGCAGAGCACCGTCTGCG
TGAGGAGATCCTGGCCAAGTTCCTGCACTGGCTGATGAGTGTGTACGTCGTCGAGCTGCTCAGGTCTTTC
TTTTATGTCACGGAGACCACGTTTCAAAAGAACAGGCTCTTTTTCTACCGGAAGAGTGTCTGGAGCAAGT
TGCAAAGCATTGGAATCAGACAGCACTTGAAGAGGGTGCAGCTGCGGGAGCTGTCGGAAGCAGAGGTCAG
GCAGCATCGGGAAGCCAGGCCCGCCCTGCTGACGTCCAGACTCCGCTTCATCCCCAAGCCTGACGGGCTG
CGGCCGATTGTGAACATGGACTACGTCGTGGGAGCCAGAACGTTCCGCAGAGAAAAGAGGGCCGAGCGTC
TCACCTCGAGGGTGAAGGCACTGTTCAGCGTGCTCAACTACGAGCGGGCGCGGCGCCCCGGCCTCCTGGG
CGCCTCTGTGCTGGGCCTGGACGATATCCACAGGGCCTGGCGCACCTTCGTGCTGCGTGTGCGGGCCCAG
GACCCGCCGCCTGAGCTGTACTTTGTCAAGGTGGATGTGACGGGCGCGTACGACACCATCCCCCAGGACA
GGCTCACGGAGGTCATCGCCAGCATCATCAAACCCCAGAACACGTACTGCGTGCGTCGGTATGCCGTGGT
CCAGAAGGCCGCCCATGGGCACGTCCGCAAGGCCTTCAAGAGCCACGTCTCTACCTTGACAGACCTCCAG
CCGTACATGCGACAGTTCGTGGCTCACCTGCAGGAGACCAGCCCGCTGAGGGATGCCGTCGTCATCGAGC
AGAGCTCCTCCCTGAATGAGGCCAGCAGTGGCCTCTTCGACGTCTTCCTACGCTTCATGTGCCACCACGC
CGTGCGCATCAGGGGCAAGTCCTACGTCCAGTGCCAGGGGATCCCGCAGGGCTCCATCCTCTCCACGCTG
CTCTGCAGCCTGTGCTACGGCGACATGGAGAACAAGCTGTTTGCGGGGATTCGGCGGGACGGGCTGCTCC
TGCGTTTGGTGGATGATTTCTTGTTGGTGACACCTCACCTCACCCACGCGAAAACCTTCCTCAGGACCCT
GGTCCGAGGTGTCCCTGAGTATGGCTGCGTGGTGAACTTGCGGAAGACAGTGGTGAACTTCCCTGTAGAA
GACGAGGCCCTGGGTGGCACGGCTTTTGTTCAGATGCCGGCCCACGGCCTATTCCCCTGGTGCGGCCTGC
TGCTGGATACCCGGACCCTGGAGGTGCAGAGCGACTACTCCAGCTATGCCCGGACCTCCATCAGAGCCAG
TCTCACCTTCAACCGCGGCTTCAAGGCTGGGAGGAACATGCGTCGCAAACTCTTTGGGGTCTTGCGGCTG
AAGTGTCACAGCCTGTTTCTGGATTTGCAGGTGAACAGCCTCCAGACGGTGTGCACCAACATCTACAAGA
TCCTCCTGCTGCAGGCGTACAGGTTTCACGCATGTGTGCTGCAGCTCCCATTTCATCAGCAAGTTTGGAA
GAACCCCACATTTTTCCTGCGCGTCATCTCTGACACGGCCTCCCTCTGCTACTCCATCCTGAAAGCCAAG
AACGCAGGGATGTCGCTGGGGGCCAAGGGCGCCGCCGGCCCTCTGCCCTCCGAGGCCGTGCAGTGGCTGT
GCCACCAAGCATTCCTGCTCAAGCTGACTCGACACCGTGTCACCTACGTGCCACTCCTGGGGTCACTCAG
GACAGCCCAGACGCAGCTGAGTCGGAAGCTCCCGGGGACGACGCTGACTGCCCTGGAGGCCGCAGCCAAC
CCGGCACTGCCCTCAGACTTCAAGACCATCCTGGACTGA
4.2 运行结果:
5. 版本问题
- 数据结构的选择:将频率作为键,碱基作为值可能会导致问题,因为不同的碱基可能有相同的频率,而字典的键必须是唯一的。
- GC 含量计算:当前的 GC 含量计算可能存在问题,因为它直接使用了字典中的频率值进行求和,而不是重新计算 GC 含量。
6. 欢迎探讨
欢迎评论或私信探讨!