2015-01-28 2 views
-1

Я пишу программу для определения процента каждой аминокислоты в данной последовательности. Я пытался сделать его полезным для любой последовательности, заставив его выводить как процент каждой аминокислоты, так и рассказывая мне, какие аминокислоты из словаря отсутствуют. У меня здесь некоторые трудности, и я бы очень признателен за некоторые рекомендации.Проблемы с вычислением частоты аминокислот

Так что больше проработки я пытаюсь сделать так, чтобы на выходе показывался процент каждой аминокислоты в предоставленной строке, включая те, которые не находятся в строке.

Вот мой текущий код:

protein = """MKLFWLLFTIGFCWAQYSSNTQQGRTSIVHLFEWRWVDIALECERYLAPKGFGGVQVSPPNENVAIHNPFRPWWERYQPVSYKLCTRSGNEDEFRNMVTRCNNVGVRIYVDAVINHMCGNAVSAGTSSTCGSYFNPGSRDFPAVPYSGWDFNDGKCKTGSGDIENYNDATQVRDCRLSGLLDLALGKDYVRSKIAEYMNHLIDIGVAGFRIDASKHMWPGDIKAILDKLHNLNSNWFPEGSKPFIYQEVIDLGGEPIKSSDYFGNGRVTEFKYGAKLGTVIRKWNGEKMSYLKNWGEGWGFMPSDRALVFVDNHDNQRGHGAGGASILTFWDARLYKMAVGFMLAHPYGFTRVMSSYRWPRYFENGKDVNDWVGPPNDNGVTKEVTINPDTTCGNDWVCEHRWRQIRNMVNFRNVVDGQPFTNWYDNGSNQVAFGRGNRGFIVFNNDDWTFSLTLQTGLPAGTYCDVISGDKINGNCTGIKIYVSDDGKAHFSISNSAEDPFIAIHAESKL""" #exchange sequence for unique analysis 
amino_acid = ['C', 'D', 'S', 'Q', 'K', 'P', 'T', 'F', 'A', 'X', 'G', 'I', 'E', 'L', 'H', 'R', 'W', 'M', 'N', 'Y', 'V'] 
for a in amino_acid: 
    if a in protein: 
     print "Percentage of" + amino_acid[a] + "is" + ((protein.count(a)) * 100/len(protein)) 
    else: 
     print amino_acid[a] + "is not in sequence" 

Это то, что я делал раньше, который работал, но не показал бы аминокислоты, которые не появляются на всех (0%)

from collections import Counter 
sequence = "MKLFWLLFTIGFCWAQYSSNTQQGRTSIVHLFEWRWVDIALECERYLAPKGFGGVQVSPPNENVAIHNPFRPWWERYQPVSYKLCTRSGNEDEFRNMVTRCNNVGVRIYVDAVINHMCGNAVSAGTSSTCGSYFNPGSRDFPAVPYSGWDFNDGKCKTGSGDIENYNDATQVRDCRLSGLLDLALGKDYVRSKIAEYMNHLIDIGVAGFRIDASKHMWPGDIKAILDKLHNLNSNWFPEGSKPFIYQEVIDLGGEPIKSSDYFGNGRVTEFKYGAKLGTVIRKWNGEKMSYLKNWGEGWGFMPSDRALVFVDNHDNQRGHGAGGASILTFWDARLYKMAVGFMLAHPYGFTRVMSSYRWPRYFENGKDVNDWVGPPNDNGVTKEVTINPDTTCGNDWVCEHRWRQIRNMVNFRNVVDGQPFTNWYDNGSNQVAFGRGNRGFIVFNNDDWTFSLTLQTGLPAGTYCDVISGDKINGNCTGIKIYVSDDGKAHFSISNSAEDPFIAIHAESKL" #exchange sequence for unique analysis 
counts = Counter(sequence) 
length = len(sequence) 
dictionary = dict(counts) 
amino_acids = list(dictionary) 
freq = dictionary.values() 
percentage = [] 
for item in freq: 
    percentage.append(((item)/float(length))*100) 
print "The percentage of each amino acid in the provided sequence are shown below:" 
print str(zip(amino_acids, percentage)) 
+3

Не могли бы вы предложить более полезное описание проблемы, чем * «не работает» *? – jonrsharpe

+1

Вы должны использовать 'amino_acid [a]', просто используйте 'a'. Цикл 'for' выполняет итерацию по значениям массива, поэтому' a' будет '' C'', '' D'', ... – Jasper

+0

да, «не работает» не так грандиозно ... дайте нам показан пример вывода, включая любые сообщения об ошибках, а также то, что вы ожидали от вывода. (отредактируйте свой вопрос и добавьте его там, не просто скажите нам в комментариях) –

ответ

1

Стоит вдаваться в подробности о проблеме, которую вы пытаетесь решить, но, основываясь на том, что вы указали выше, я вполне уверен, что вы ищете объект Counter.

В частности:

>>> from collections import Counter: 
>>> test = Counter("""MKLFWLLFTIGFCWAQYSSNTQQGRTSIVHLFEWRWVDIALECERYLAPKGFGGVQVSPPNENVAIHNPFRPWWERYQPVSYKLCTRSGNEDEFRNMVTRCNNVGVRIYVDAVINHMCGNAVSAGTSSTCGSYFNPGSRDFPAVPYSGWDFNDGKCKTGSGDIENYNDATQVRDCRLSGLLDLALGKDYVRSKIAEYMNHLIDIGVAGFRIDASKHMWPGDIKAILDKLHNLNSNWFPEGSKPFIYQEVIDLGGEPIKSSDYFGNGRVTEFKYGAKLGTVIRKWNGEKMSYLKNWGEGWGFMPSDRALVFVDNHDNQRGHGAGGASILTFWDARLYKMAVGFMLAHPYGFTRVMSSYRWPRYFENGKDVNDWVGPPNDNGVTKEVTINPDTTCGNDWVCEHRWRQIRNMVNFRNVVDGQPFTNWYDNGSNQVAFGRGNRGFIVFNNDDWTFSLTLQTGLPAGTYCDVISGDKINGNCTGIKIYVSDDGKAHFSISNSAEDPFIAIHAESKL""") 
>>> test 
Counter({'G': 52, 'N': 41, 'D': 35, 'V': 35, 'S': 33, 'F': 29, 'I': 28, 'R': 28, 'A': 27, 'L': 27, 'K': 24, 'T': 23, 'P': 22, 'Y': 21, 'E': 20, 'W': 19, 'C': 12, 'H': 12, 'Q': 12, 'M': 11}) 

, который должен быть достаточно для того, чтобы идти дальше. Дайте знать, если у вас появятся вопросы. Попытка не полностью отложить ответ, хотя.

+1

Вы можете сравнить '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' счет '' с помощью 'set', потому что заказ не имеет значения. – Jasper

0
protein = """MKLFWLLFTIGFCWAQYSSNTQQGRTSIVHLFEWRWVDIALECERYLAPKGFGGVQVSPPNENVAIHNPFRPWWERYQPVSYKLCTRSGNEDEFRNMVTRCNNVGVRIYVDAVINHMCGNAVSAGTSSTCGSYFNPGSRDFPAVPYSGWDFNDGKCKTGSGDIENYNDATQVRDCRLSGLLDLALGKDYVRSKIAEYMNHLIDIGVAGFRIDASKHMWPGDIKAILDKLHNLNSNWFPEGSKPFIYQEVIDLGGEPIKSSDYFGNGRVTEFKYGAKLGTVIRKWNGEKMSYLKNWGEGWGFMPSDRALVFVDNHDNQRGHGAGGASILTFWDARLYKMAVGFMLAHPYGFTRVMSSYRWPRYFENGKDVNDWVGPPNDNGVTKEVTINPDTTCGNDWVCEHRWRQIRNMVNFRNVVDGQPFTNWYDNGSNQVAFGRGNRGFIVFNNDDWTFSLTLQTGLPAGTYCDVISGDKINGNCTGIKIYVSDDGKAHFSISNSAEDPFIAIHAESKL""" #exchange sequence for unique analysis 
amino_acid = ['C', 'D', 'S', 'Q', 'K', 'P', 'T', 'F', 'A', 'X', 'G', 'I', 'E', 'L', 'H', 'R', 'W', 'M', 'N', 'Y', 'V'] 
counts = {} 
for amino in amino_acid: counts[amino] = 0 
total = 0 
for a in amino_acid: 
    if a in protein: 
     counts[a] = protein.count(a) 
     fraction = float(counts[a])/float(len(protein)) 
     percent = fraction * 100 
     print "Percentage of " + a + " is: %.2f%%" % percent 
     total += percent 
    else: 
     print "Percentage of " + a + " is: 0.0%" 
print 'Total: ', str(total) + '%' 
print 'Amino Acid Counts: ', counts