2016-10-30 7 views
3

У меня следующая последовательность:Как сравнить элементы в списке списков и сравнить ключи в списке списков в 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'} 

Как можно видеть несколько кодонов могут кодировать же аминокислоту (например. GGT,GGC,GGA, GGG etc all code for Glycine (G)). Они являются синонимами (PSyn) и если кодоны кодируют различные аминокислоты, они не являются Синоним (PNonsyn)

В этом коде, мне нужно сделать следующее:

  1. Для каждого элемента в списке списков, если есть изменение оснований и все они код одной и той же аминокислоты, затем увеличить счетчик PSyn на 1 и, если он кодирует различных аминокислот приращения рассчитывать PNonsyn 1

    здесь

    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 = 1 CountPNonsyn = 1

  2. Создание списка аминокислот, которая соответствует указанной выше SEQ. такие, что:

    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

Это тяжелый я не биоинженерик, но я попробую LOL. – 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, вы можете найти все элементы uniques в списке, вызвав set(mylist). Например.

>>> a = ['AGT','AGT','ACG'] 
>>> set(a) 
set(['AGT', 'ACG']) 
>>> len(set(a)) 
2 
Смежные вопросы