2012-01-08 41 views
-1

我必须的DNA序列的互补序列翻译成氨基酸查找DNA序列的互补序列

TTTCAATACTAGCATGACCAAAGTGGGAACCCCCTTACGTAGCATGACCCATATATATATATATA 
TATATATATATATATGGGTCATGCTACGTAAGGGGGTTCCCACTTTGGTCATGCTAGTATTGAAA 
+1 TyrIleTyrIleTyrGlySerCysTyrValArgGlyPheProLeuTrpSerCysStpTyrStp 
+2 IleTyrIleTyrMetGlyHisAlaThrOc*GlyGlySerHisPheGlyHisAlaSerIleglu 
+3 TyrIleTyrIleTrpValMetLeuArgLysGlyValProThrLeuValMetLeuValLeuLys 
  • 拳头序列是正常序列,
  • 第二个是互补序列,
  • 带+1的那一个是对应于我的互补序列的氨基酸序列
  • 带有+2的那个是对应于我的互补序列的氨基酸序列开始在第二基站
  • 与3的一个是对应于我的互补序列与所述第三基

我已经尝试下一个代码,让我的结果开始的氨基酸序列,但所以我得到只是一个complementair seq。没有分裂。

seq = "CCGGAAGAGCTTACTTAG" 
basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 

def translate(seq): 

    x = 0 
    aaseq = [] 
    while True: 
     try: 
      aaseq.append(basecomplement[seq[x:x+1]]) 
      x += 1 

     except (IndexError, KeyError): 
      break 
    return aaseq 

for frame in range(1): 
    #print(translate(seq[frame:])) 

    rseqn= (''.join(item.split('|')[0] for item in translate(seq[frame:]))) 

    rseqn = list(rseqn) 
    rseqn.reverse() 

    print(rseqn) 

有人可以帮助我得到我的结果吗?

+0

我试图清理问题以清楚问题所在。 – 2012-01-08 12:10:22

+0

我重新编写了我的序列以清楚说明。 – 2012-01-08 12:19:49

回答

6

用途:

for frame in range(1): 
    rseqn = reversed([item for item in translate(seq[frame:])]) 
    rseqn = ''.join(rseqn) 

    print(rseqn) 

这将产生正确的互补(反转)secuence:

CTAAGTAAGCTCTTCCGG 

请注意,您不需要进行循环(当前其实是什么都不做)到确定DNA或RNA互补序列,因为这与翻译框架无关。

话虽如此,但是,我必须强调,ALL你的代码可以在四行,如果你开始使用BioPython您的生物信息学的任务简化为:

>>> from Bio import SeqIO 
>>> from Bio.Alphabet import NucleotideAlphabet 
>>> dna = SeqIO.Seq("CCGGAAGAGCTTACTTAG", NucleotideAlphabet()) 
>>> dna.reverse_complement() 
Seq('CTAAGTAAGCTCTTCCGG', NucleotideAlphabet()) 
>>> 
+0

+1 BioPython推荐 – 2012-01-08 12:09:40

+0

biopython不被允许,但感谢您的想法。 – 2012-01-08 12:15:19

+4

@ user1136962谁不允许为特定任务使用适当的库?如果这是作业,你必须标记你的问题。我对Emyne说过同样的话。 – joaquin 2012-01-08 12:19:36

0

我已经清理代码有点:

seq = "CCGGAAGAGCTTACTTAG" 
basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 

def translate(seq): 
    aaseq = [] 
    for character in seq: 
     aaseq.append(basecomplement[character]) 
    return aaseq 

for frame in range(1): 
    rseqn= (''.join(item.split('|')[0] for item in translate(seq[frame:]))) 
    rseqn = rseqn[::-1] 
    print(rseqn) 

看看这是否适合你。

你正在做的是将rseqn转换成列表,反转列表并打印列表。我写的代码永远不会将rseqn转换为列表。 rseqn最初是一个字符串,行rseqn = rseqn[::-1]为您反转字符串。所以,最后,你打印的是一个字符串,而不是一个列表,因此,没有分裂。

+0

我不完全知道你的意思是分裂。这是为了回应我所能理解的。 – Divya 2012-01-08 11:19:37

9

看起来你已经采取了一些代码,并试图使用它,根本不理解它做什么。如果您阅读linked question,您会注意到该问题中的海报有一个由|分隔的氨基酸代码字典。对split的调用是提取每个代码串的第二部分,例如,从"F|Phe"你想得到"Phe",这就是为什么该海报需要split。你没有这些类型的字符串,所以你不应该使用这部分代码。

我将第二华金的建议,使用BioPython,因为它明确了工作,但出于学习目的正确的工具:你需要知道的第一件事情是,你有四项任务要完成:

  1. 计算DNA碱基序列的反向互补
  2. 打破反向互补序列成3个碱基
  3. 群组的每一群组转换成氨基酸代码
  4. 把氨基酸代码一起成字符串

链接答案中的代码不处理第一步。为此,您可以使用Python字符串对象的translate方法。首先,你使用maketrans产生一个翻译字典,地图键=>值,

basecomplement = str.maketrans({'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}) 

,然后你可以写一个方法来产生反向互补,

def reverse_complement(seq): 
    return seq.translate(basecomplement)[::-1] 

华的回答的translate方法在另一个问题上执行步骤2和3.使用itertoolsgrouper配方实际上可以更高效地完成。首先,你需要一个字典映射碱基三联氨基酸,

amino_acids = {'TAT': 'Tyr', ...} 

,然后你可以用它来的碱基的任意序列转换,

amino_acids[''.join(a)] for a in zip(*([iter(rseq)]*3)) 

通过解释,zip(*([iter(rseq)]*3))群体杂三一次。但它可以作为元组而不是字符串,例如对于'TATATA',你会得到('T', 'A', 'T'), ('A', 'T', 'A'),所以你需要加入每个元组来创建一个字符串。这就是''.join(a)所做的。然后你在氨基酸表中查找字符串,由amino_acids[...]完成。

最后,您需要将所有生成的氨基酸代码连接在一起,这可以通过外部''.join(...)完成。所以,你可以定义这样的方法:

def to_amino_acids(seq): 
    return ''.join(amino_acids[''.join(a)] for a in zip(*([iter(rseq)]*3))) 

需要注意的是,除非你amino_acids字典包含|分隔的多个表示你不需要.split('|')

最后,以用于将基地氨基酸,即三个框架,你可以使用在华的回答一些类似于最终循环的三种不同的可能的方式做到这一点,

rseq = reverse_complement(seq) 
for frame in range(3): 
    # print the frame number 
    print('+', frame+1, end=' ') 
    # translate the base sequence to amino acids and print it 
    print(to_amino_acids(rseq[frame:])) 

注意此循环运行三个次,以打印三个不同的帧。如果你只是想让它运行一次,循环就没有意义了。

+0

如果你想了解里劈(一切)来自[见我的答案在这里(http://stackoverflow.com/questions/8700920/translate-my-sequence) – joaquin 2012-01-08 11:51:05

+0

啊啊啊,我明白了...感谢提示;-) – 2012-01-08 12:00:19

+0

+1了很好的尝试 – joaquin 2012-01-08 12:50:27