2016-10-13 11 views
1

私はこのようなDNA配列のリストを持っている: 非常に小さな例:呼び出し値やリストの値を変更する

> seq = ['ATGGCGGCGCGA', 'GCCTCTGCCTTG', 'CTGAAAACG'] 

、あなたは3で各列の文字数を分割する場合は、希望偶数になる 私はまたコドンとアミノ酸であるこの辞書を持っています。

gencode = { 
     'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M', 'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T', 
     'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K', 'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R', 
     'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L', 'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P', 
     'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q', 'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R', 
     'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V', 'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A', 
     'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E', 'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G', 
     'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S', 'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L', 
     'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_', 'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W'} 

各codn(3文字)をそのアミノ酸(上記の辞書の値)に置き換えたいと考えています。小さな例えば 結果は次のようになります:

AA : ['MAAR', 'ASAL', 'LKT'] 

は、あなたたちはそれを行う方法を知っていますか?

+1

BioPythonを見ましたか?それは、あなたが求めていることに加え、はるかに多くを行います。それはよくテストされ、検証されています。これはおそらくほとんどの自家製コードよりも優れています。 –

+0

Andrewと合意すると、[Bio.SeqUtils.six_frame_translations](http://biopython.org/DIST/docs/api/Bio.SeqUtils-module.html#six_frame_translations)があり、すべてのリーディングフレームでそれを行います... –

答えて

1

確かに(多分そこにそれを行うための、より神託の方法ですが、それは簡単で、動作します):

seq = ['ATGGCGGCGCGA', 'GCCTCTGCCTTG', 'CTGAAAACG'] 
gencode = { 
     'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M', 'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T', 
     'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K', 'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R', 
     'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L', 'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P', 
     'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q', 'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R', 
     'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V', 'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A', 
     'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E', 'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G', 
     'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S', 'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L', 
     'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_', 'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W'} 

total_result = [] 
for s in seq: # for each item 
    # listcomp to decompose & create char list 
    result = [gencode[s[i:i+3]] for i in range(0,len(s),3)] 
    total_result.append("".join(result)) # append as string 

print(total_result) 

結果:あなたはリスト内包で1つのライナーを行うことができます

['MAAR', 'ASAL', 'LKT'] 
2

seq = ['ATGGCGGCGCGA', 'GCCTCTGCCTTG', 'CTGAAAACG'] 
gencode = { 
     'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M', 'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T', 
     'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K', 'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R', 
     'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L', 'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P', 
     'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q', 'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R', 
     'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V', 'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A', 
     'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E', 'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G', 
     'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S', 'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L', 
     'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_', 'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W'} 

res = [''.join(gencode[s[i:i+3]] for i in range(0, len(s), 3)) for s in seq] 
print(res) 

出力:

['MAAR', 'ASAL', 'LKT'] 
1

長さ3のチャンクに反復可能に分割するヘルパー・ジェネレータを定義:

def chunks(xs, n): 
    for i in range(0, len(xs), n): 
     yield xs[i:i + n] 

バック一緒に、その対応するアミノ酸とグループでそれらを各チャンクを交換:

result = [''.join(gencode[c] for c in chunks(s, 3)) for s in seq] 

この収量:

In [1]: result 
Out[1]: ['MAAR', 'ASAL', 'LKT'] 
関連する問題