gpt4 book ai didi

python - 计算 DNA 序列中的三联体

转载 作者:行者123 更新时间:2023-12-01 09:17:00 31 4
gpt4 key购买 nike

我想编写一个代码来计算序列中的所有三元组。到目前为止,我读了很多帖子,但没有一个对我有帮助。

这是我的代码:

def cnt(seq):
mydict = {}
if len(seq) % 3 == 0:
a = [x for x in seq]
for i in range(len(seq)//3):
b = ''.join(a[(0+3*i):(3+3*i)])
for base1 in ['A', 'T', 'G', 'C']:
for base2 in ['A', 'T', 'G', 'C']:
for base3 in ['A', 'T', 'G', 'C']:
triplet = base1 + base2 + base3
if b == triplet:
mydict[b] = 1
for key in sorted(mydict):
print("%s: %s" % (key, mydict[key]))
else:
print("Error")

Biopython提供了解决这个问题的函数吗?

编辑:

请注意,例如,在序列“ATGAAG”、“TGA”或“GAA”中不是“有效”三元组,只有“ATG”和“AAG”,因为在生物学和生物信息学中,我们将其读作“ATG”和“AAG”,这就是我们需要翻译它或其他任何内容的信息。

您可以将其想象为单词序列,例如“Hello world”。我们的读法是“Hello”和“world”,而不是“Hello”、“ello”、“llo w”……

最佳答案

我花了一段时间才明白你不想计算密码子的数量,而是计算每个密码子的频率。在这方面你的标题有点误导。不管怎样,你可以雇用collections.Counter对于您的任务:

from collections import Counter

def cnt(seq):
if len(seq) % 3 == 0:
#split list into codons of three
codons = [seq[i:i+3] for i in range(0, len(seq), 3)]
#create Counter dictionary for it
codon_freq = Counter(codons)
#determine number of codons, should be len(seq) // 3
n = sum(codon_freq.values())
#print out all entries in an appealing form
for key in sorted(codon_freq):
print("{}: {} = {:5.2f}%".format(key, codon_freq[key], codon_freq[key] * 100 / n))
#or just the dictionary
#print(codon_freq)
else:
print("Error")

seq = "ATCGCAGAAATCCGCAGAATC"

cnt(seq)

示例输出:

AGA: 1 = 14.29%
ATC: 3 = 42.86%
CGC: 1 = 14.29%
GAA: 1 = 14.29%
GCA: 1 = 14.29%

关于python - 计算 DNA 序列中的三联体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51156886/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com