2012-05-02 5 views
0

У меня есть следующий код, в котором осколочная представляет собой список строк, которые разрезают (в порядке убывания) данных ДНК-последовательности:Python, если заявления, продвигающихся

for a in frag: 
    length_fragment = len(a) 
    if (a[0:5] == 'CCAGC')  and (a[-1:] == 'C'): 
     total_length.append(length_fragment) 

Я же хочу, чтобы перейти к следующему а в цикл for и посмотреть, являются ли первые буквы этого следующего фрагмента CCAGC ... это возможно в python.

Поэтому я хочу изменить a [-1:] == 'C', чтобы быть статусом, который является следующим [0: 5] == 'ACGAG'. Ключевым словом является следующий a в цикле for. Поэтому я хочу кратко пропустить в цикле for.

+0

Я понятия не имею, что вы пытаетесь сказать. Не могли бы вы показать образец ввода, соответствующий выход и поговорить по алгоритму? –

ответ

1
for a, next_a in zip(frag, frag[1:]): 

Если осколочная велико, то это будет более эффективно использовать itertools.islice вместо [1:]

+0

Это сработало ... спасибо –

1

Использование continue пропустить оставшуюся часть for цикла и перезагрузки в начале следующей итерации цикла.

0

(Я не на 100% проясняю ваши намерения, поэтому я буду интерпретировать: вы хотите найти последовательности, начинающиеся с CCAGC, но только если следующая последовательность начинается с ACGAG. В этом предположении ...)

Если это удобно, хранить данные в виде одной строки, содержащей все последовательности, по одному в каждой строке, а затем использовать регулярное выражение:

ccagc_then_acgag = re.compile('(CCAGC.*)\n(?=ACGAG)') 
sum(len(seq) for seq in ccagc_then_acgag.findall(sequences)) 

Я не могу сказать, будет ли это быстрее или медленнее, чем итерация список строк (библиотеки регулярных выражений имеют несколько хороших оптимизаций, и весь цикл работает в собственном коде, но список строк имеет то преимущество, что не нужно сканировать целую строку li ne, чтобы найти матч ACGAG), но это стоит проверить.

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