【Rosalind】Locating Restriction Sites – 活学活用之再次使用all()

Rosalind习题:Locating Restriction Sites (题目ID:REVP)

今天的一道习题很简单,我在做的过程中想到了用之前学到的all()函数,用很简洁的代码就完成了好像很复杂的一件事情,其实没有新内容,只是为了自己的活学活用(现学现卖)更一篇博客。

Problem

A DNA string is a reverse palindrome if it is equal to its reverse complement. For instance, GCATGC is a reverse palindrome because its reverse complement is GCATGC. See Figure 2.

Given: A DNA string of length at most 1 kbp in FASTA format.

Return: The position and length of every reverse palindrome in the string having length between 4 and 12. You may return these pairs in any order.

Sample Dataset

>Rosalind_24
TCAATGCATGCGGGTCTATATGCAT

Sample Output

4 6
5 4
6 6
7 4
17 4
18 4
20 6
21 4

思路

这道题很简单,就是需要找出所给序列中的回文结构,回文结构的意思就是像GCATGC这样的序列本身和它的反向互补序列相同。 观察这样的回文序列,我就发现了,这样的序列第n个位置的碱基和倒数第n个位置的碱基,必然是A-T或者是G-C,这样他反过来互补才能是一样的。 掌握了这个规律,我就可以对所有的序列进行筛选了,只要大序列中找到切出小序列满足小序列中所有的正数倒数第n个碱基都是A-T或者G-C,就可以输出。

我的代码

最核心的筛选就是在这一步: if all((test[j],test[k-j-1]) in palindrome_pairs for j in range(k)):all()就是检验之后的一个列表是不是全为True,如果是的,那就返回True,不是就返回False。所以如果全部都是符合配对的,就是要找的序列啦!

感想

刚刚开始学习代码的时候,感觉总是需要去查别人写的代码,去想别人写的时候是一个什么样的思路。慢慢的发现自己学习到的东西,也会被反复使用,然后再反复使用的过程中加深了对这个内容的理解!

Share this page if you like this post:)