擅长:python、mysql、java
<p>这是一个强力实现,尽管它对超长序列可能不是很有用。在</p>
<pre><code>def substrings(s, lmin, lmax):
for i in range(len(s)):
for l in range(lmin, lmax+1):
subst = s[i:i+l]
if len(subst) == l:
yield i, l, subst
def ivp(s, lmin, lmax):
mapping = {'A': 'T', 'G': 'C', 'T': 'A', 'C': 'G'}
for i, l, sub in substrings(s, lmin, lmax):
try:
from string import maketrans
except ImportError: # we're on Python 3
condition = sub.translate(
{ord(k): v for k, v in mapping.items()})[::-1] in s
else: # Python 2
condition = sub.translate(maketrans('ATGC', 'TACG'))[::-1] in s
if condition:
yield i, l, sub
</code></pre>
<p>让我们找出长度为6的“反向重复模式”(及其起始位置和长度):</p>
^{pr2}$
<p>不过,这并不能检查这两种模式是否重叠。例如,<code>'CTGCAG'</code>匹配自身。在</p>