2016-10-30 13 views
3

Iは、以下の配列を有する:ここリストのリスト内の要素を比較し、Pythonのリストのリストでキーを比較する方法は?

seq = [['ATG','ATG','ATG','ATG'],['GAC','GAT','GAA','CCT'],['GCC','GCG','GCA','GCT']] 

コドン(ATG, GCT等のようなトリプレットの塩基)のそれぞれのアミノ酸の値を格納する辞書のキーです。

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

1は、いくつかのコドンが同じアミノ酸をコードすることができる見ることができるように(例えば。GGT,GGC,GGA, GGG etc all code for Glycine (G))。これらは、このコードでは同義(PSyn)と、彼らは非同義(PNonsyn)されている別のアミノ酸に対するコドンコード場合

、私は次のことを行う必要があります:

リストの各要素について
  1. リストの、そこに拠点の変化があり、それらが同じアミノ酸のためのすべてのコードは、1によりPSynの数を増やすと、場合、別のアミノ酸のそれのコードはここ1

    でPNonsynをカウントインクリメント場合、

    ATG all code for M #However, all are ATG's no change in bases. So no increment in count 
    
    GAC, GAT for D; GAA for E; and CCT for P #Codes for three different amino acids, increment count by 1 
    
    GGT,GGC,GGA, GGG for G #Different bases but all code for same amino acids, increment count by 1 
    

    出力: CountPsyn = 1CountPNonsyn = 1

  2. 上記配列に対応するアミノ酸のリストを生成します。私が動作するようにプログラムを入手するには、次のコードを修正する助けが必要

    Output : ['ATG','nonsyn','G'] #For sites with different aminoacids, the list should say nonsyn and for sites which had identical bases it should list the bases

:ように。私は辞書から値を呼び出し、すべての要素に対してそれらをチェックする方法を確信していません。 コードが試行されました:

countPsyn = 0 
countPnonsyn = 0 
listofaa =[] 

for i in seq: 
    for base, value in enumerate(i):   
     if value[i] == value[i+1]: #eg. ['ATG','ATG','ATG','ATG'] 
      listofaa.append(value) 

     if value[i] != value[i+1]: 
      if aminoacid[value][i] == aminoacid[value][i+1]: #eg.['GCC','GCG','GCA','GCT'] 
       countPsyn =+ 1 
       listofaa.append(aminoacid) 
      else: #eg. ['GAC','GAT','GAA','CCT'] 
       countPnonsyn =+ 1 
       listofaa.append('nonsyn') 

File Output can be found [here][1] https://eval.in/669107 
+0

インデントを修正してください。 –

+0

@ Jean-FrançoisFabreそれを指摘してくれてありがとう。私はそれを修正しました – Biotechgeek

+0

これは私がバイオエンジニアではない難しいですが、私は笑を試してみます。 – thesonyman101

答えて

1

解決策は私のものです。

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

seq = [['ATG','ATG','ATG','ATG'],['GAC','GAT','GAA','CCT'],['GCC','GCG','GCA','GCT']] 

Psyn = 0; 
PNonsyn = 0; 
output = []; 

#loop through each list in your list of list 
for sublist in seq: 
    acids = [aminoacid[base] for base in sublist] 
    if len(set(acids)) != 1: #if there are different amino acids, then nonsync 
     output.append('nonsync') 
     PNonsyn += 1 
    else: #if same amino acid 
     if len(set(sublist)) == 1: #if same base 
      output.append(sublist[0]); 
     else: #if not same base 
      output.append(acids[0]); 
      Psyn += 1 

print "Psyn = "+ str(Psyn) 
print "PNonsyn = "+ str(PNonsyn) 
print output 

確かにそれはあなたのコードの変更はありませんが、二重のforループを無効にするためにここに巧妙なトリックがあります。 mylistというリストがあると、リスト内のすべてのユニーク要素はset(mylist)を呼び出すことで見つけられます。例えば。

>>> a = ['AGT','AGT','ACG'] 
>>> set(a) 
set(['AGT', 'ACG']) 
>>> len(set(a)) 
2 
関連する問題