2012-01-08 36 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