2015-06-29 1 views
0

Я пытаюсь написать функцию, которая смотрит на сегмент более длинной строки, вычисляет содержимое GC, а затем перемещается по следующему сегменту и т. Д. ,Python 2.7 - Определить острова патогенности - рассчитать содержание GC по всем разделам строки

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

Например: у меня есть строка «TATAGCATCGATCTCTGACGTATCGATCGATCGTCTATATA». Я хочу, чтобы функция смотрела на первые 5 индексов, вызывая мою существующую функцию для вычисления содержимого GC и переходила к следующим 5 индексам и так далее до конца Струна.

Это моя функция для расчета содержания GC.

def GCcont(DNA): 
    '''calculate GC content''' 
    counter=0 
    for nuc in DNA: 
     if nuc=='G' or nuc=='C': 
      counter=counter+1 
    return counter/float(len(DNA)) 

Есть ли у кого-нибудь предложения?

ответ

0

Вот еще один способ:

def get_gc_across_sections(s): 
    sections = [s[i:i+5] for i in range(0, len(s), 5)] 
    return [GCcont(section) for section in sections] 

Кстати, обычной практикой является использование случая змейки, в отличие от случая с верблюдом, для имен функций в Python.

+0

Спасибо за головы о змее против верблюда. Я вижу, что это аналогично тому, что находится в руководстве по стилю PEP 0008. В книге, в которой я работаю, постоянно используется конвенция о верблюжьем деле. –

+0

Без проблем! Да, это правильно. Я бы сказал, что большинство программистов на Python придерживаются либо pep-8, либо руководства по стилю Google Python, оба из которых выступают за это соглашение об именах. Пребывание в соответствии с любым выбранным вами стилем, вероятно, более важно. –

0

Я бы сделал генератор, который выплевывает блоки вашей последовательности ДНК:

def section(dna, blocksize): 
    start = 0 
    while True: 
     end = start + blocksize 
     yield dna[start:end] 
     if end > len(dna): 
      break 
     start = end 

Он работает следующим образом:

>>> dna = 'TATAGCATCGATCTCTGACGTATCGATCGATCGTCTATATA' 
>>> list(section(dna, 5)) 
['TATAG', 'CATCG', 'ATCTC', 'TGACG', 'TATCG', 'ATCGA', 'TCGTC', 'TATAT', 'A'] 

Затем вычислительное контент GC для каждого блока так просто, как :

>>> [GCcont(block) for block in section(dna, 5)] 
[0.2, 0.6, 0.4, 0.6, 0.4, 0.4, 0.6, 0.0, 0.0] 

 Смежные вопросы

  • Нет связанных вопросов^_^